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 件のコメント :
コメントを投稿