自動レイアウトの練習と制約のアニメーションについて学習しています。
私の最初の質問です。ビューを動的に追加する場合、それらの制約を親ビューにも動的に追加するのは面倒です。ビューをプログラムで追加および削除できる柔軟なレイアウトを実現するクリーンな方法はありますか? それとも、これは、私が達成しようとしていることに対して、おそらくより簡単な解決策を考えるべきであることを意味しますか?
2 番目の質問です。2 つのビューと、コード内のいくつかの制約を作成しました。ロード時に最初のビューの高さの制約のサイズを変更して短くしようとしているだけで、それに応じて2番目のビューが上に移動します。
ここにいくつかのコードがあります:
first = [[UIView alloc]initWithFrame:CGRectZero];
[first setBackgroundColor:[UIColor blueColor]];
[first setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:first];
UIView *second = [[UIView alloc]initWithFrame:CGRectZero];
[second setBackgroundColor:[UIColor redColor]];
[second setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:second];
NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:20];
NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-20];
top = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:40];
height = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:80];
[self.view addConstraints:@[leading,trailing,top,height]];
[height setConstant:10];
[UIView animateWithDuration:0.5 animations:^{
[self.view layoutIfNeeded];
}];
わかりましたので、ここの一番下でアニメーションを実行します。2 番目のビューは、アニメーションの最後になる位置に既に配置されています。最初のビューは、左上隅から右下隅まで拡大します。斜めにアニメーション化され、最終的に高さ 10 になります。
誰でもこの動作を説明できますか? 制約を割り当てて IBAction (ボタン タッチ) でアニメーション化すると、期待どおりにアニメーション化されることに気付きました。