LoginSignup
1
1

More than 3 years have passed since last update.

トルツメにframeやらNSLayoutConstraint使うとかお前はミスターアンモナイトかwwwwww

Last updated at Posted at 2019-11-26

初投稿です。温かい目でみてください。

現場でframeやらNSLayoutConstraintを変数化して弄ってトルツメを実現しているのが余りに多いので可読性を上げるためにもStackViewを使用して短いコードで書いちゃおうという記事です。

ログイン時と非ログイン時でレイアウトを変更したい!

例えばログイン時は会員メニューにアクセスできるが非ログイン時はそもそもメニューを出したくないなんてレイアウト

圧縮用.gif

こんな感じですね。

そしてコードですがこちらです。

viewcontroller.swift
    @IBAction func eventButton(_ sender: Any) {
        UIView.animate(withDuration: 0.3) {
            self.hiddenLabel.isHidden = !self.hiddenLabel.isHidden;
            self.hiddenView.isHidden = !self.hiddenView.isHidden;
        }
    }
viewcontroller.m

- (IBAction)eventButton:(id)sender {
    [UIView animateWithDuration:0.3f animations:^{
        self.hiddenLabel.hidden = !self.hiddenLabel.isHidden;
        self.hiddenView.hidden = !self.hiddenView.isHidden;
    }];
}

以上です。

viewやらラベルをhiddenにするだけでトルツメできてます。

方法

StackViewにいれて自動でレイアウトを変更することによってトルツメを実現しています。
スクリーンショット 2019-11-26 7.45.18.png

上部のラベルの制約ですが、
スクリーンショット 2019-11-26 7.46.06.png
どの機種であっても幅を変えたくないので高さを30に固定。
上、右、左にsuperViewに0でConstraintを設定しています。

下部のビューの制約ですが、
スクリーンショット 2019-11-26 7.49.27.png
機種の大きさによって幅を動的に変えたいのでsuperViewの1/11の大きさに。
下、右、左にsuperViewに0でConstraintを設定しています。

そして真ん中のビューですが、
スクリーンショット 2019-11-26 7.53.42.png
上Constraintを上部ラベルに、
下Constraintを下部ビューに0で設定しています。

これによって上部と下部がなくなった場合次にsuperViewのtopとbottomがくるので自動的に紐付けされhiddenのみでトルツメができるというわけです。

最後に

実はstackviewがめちゃくちゃ嫌いだったんですがトルツメするにあたってはこれ以上便利なものはないので好きになりました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1