[Objective-C] [iOS] AutoLayoutでViewをプログラムからサイズ変更する

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

コメントを投稿