Storyboard + AutoLayoutでアプリを作成していて、プログラム上からViewのサイズを変更したい時がありました。
サイズ変更といっても、内容を削除せずにViewのサイズを変更して、非表示 -> 表示と切り替えたい場合です。
簡単なテクニックで処理を実現する事ができたので、忘備録として記載します。また、前回の回転するボタンと組み合わせる事で、ボタンを押したら出たり消えたりするViewを作成する事ができます。
サンプルのイメージは下記のようなイメージです。


AutoLayoutのHeightのサイズを変更する
早速サンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | - ( IBAction )pushButton:( id )sender { self .showLabel = ! self .showLabel; [ UIView animateWithDuration:0.3f animations:^( void ){ CGFloat viewHeight = 0.0f; if ( self .showLabel) { [ self .label sizeToFit]; viewHeight = CGRectGetHeight ( self .label.frame); self .toggleButton.transform = CGAffineTransformMakeRotation (M_PI - 0.0001); } else { self .toggleButton.transform = CGAffineTransformIdentity ; } for ( NSLayoutConstraint *constraint in self .label.constraints) { if (constraint.firstAttribute == NSLayoutAttributeHeight ) { constraint.constant = viewHeight; } } [ self .view setNeedsLayout]; }]; } |
ポイントはUILabelのNSLayoutConstraintのNSLayoutAttributeHeightの項目に対して
サイズを0.0fに設定してから、setNeedsLaoutでレイアウトを再計算させています。
これだけで、動的に出たり消えたりするViewを作成する事ができます。
しかも、AutoLaoutで他のViewの位置を再計算してくれるので、お手軽です。
少し前はこのようなViewを作成するのはちょっと面倒だった感じがしますが、いつのまにかこんなに簡単に実現できるようになっていました。
0 件のコメント :
コメントを投稿