初投稿です。温かい目でみてください。
現場でframeやらNSLayoutConstraintを変数化して弄ってトルツメを実現しているのが余りに多いので可読性を上げるためにもStackViewを使用して短いコードで書いちゃおうという記事です。
ログイン時と非ログイン時でレイアウトを変更したい!
例えばログイン時は会員メニューにアクセスできるが非ログイン時はそもそもメニューを出したくないなんてレイアウト
こんな感じですね。
そしてコードですがこちらです。
@IBAction func eventButton(_ sender: Any) {
UIView.animate(withDuration: 0.3) {
self.hiddenLabel.isHidden = !self.hiddenLabel.isHidden;
self.hiddenView.isHidden = !self.hiddenView.isHidden;
}
}
- (IBAction)eventButton:(id)sender {
[UIView animateWithDuration:0.3f animations:^{
self.hiddenLabel.hidden = !self.hiddenLabel.isHidden;
self.hiddenView.hidden = !self.hiddenView.isHidden;
}];
}
以上です。
viewやらラベルをhiddenにするだけでトルツメできてます。
方法
StackViewにいれて自動でレイアウトを変更することによってトルツメを実現しています。
上部のラベルの制約ですが、
どの機種であっても幅を変えたくないので高さを30に固定。
上、右、左にsuperViewに0でConstraintを設定しています。
下部のビューの制約ですが、
機種の大きさによって幅を動的に変えたいのでsuperViewの1/11の大きさに。
下、右、左にsuperViewに0でConstraintを設定しています。
そして真ん中のビューですが、
上Constraintを上部ラベルに、
下Constraintを下部ビューに0で設定しています。
これによって上部と下部がなくなった場合次にsuperViewのtopとbottomがくるので自動的に紐付けされhiddenのみでトルツメができるというわけです。
最後に
実はstackviewがめちゃくちゃ嫌いだったんですがトルツメするにあたってはこれ以上便利なものはないので好きになりました。