自動レイアウト制約によるUIViewアニメーション変更
-
21-12-2019 - |
質問
私は次のようなプロジェクトを持っているとします。
UIView
- 1つはyellowBox
と呼ばれるものと呼ばれているredBox
という2つのものがあります。自動レイアウトの制約は、yellowBox
がSuperViewの上部から350ポイントの先頭と末尾のスペース(すなわち、ビューの左右)で60ポイントであることを指示します。 redBox
は、同じ先行および末尾のスペースの制約を持ちます。 yellowBox
の下部が常にredBox
の上に直接上に直接あるべきであることを示すために、0の2つのボックスの間に垂直方向のスペースの制約があります。
展開黄色ボックスの展開ボタンをタップすると、yellowBox
の高さが増加し、その結果、redBox
が垂直方向のスペースの制約を満たすように移動し続ける(yellowBox
が常に上にあります。 redBox
)。これがアニメーションコードです:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
.
しかし、私はこれを正しく機能させることができませんでした。赤いアイコンで見ることができるように、現時点での制約に問題があります:
自動レイアウトが箱の高さを知る方法はありません。しかし、ボックスをサイズ変更し移動させることができるようにこの問題を解決する方法はわかりません。たとえば、yellowBox
に高さ制約を指定した場合、それはそれがサイズ変更されないようにするでしょう。高さ制約を以上(yellowBox
の高さを増やすことができるようにするために)高さの制約を設定すると、異なる制約エラーが発生します。
ストーリーボード内のXcodeを使用してすべての制約が確立されています - コードではありません。
もっと歓迎されています。
編集:表示されたときにyellowBox
は、ボタンをクリックしたときに成長しています - redBox
の背後に表示されるのでわかりませんでした。私はそれを4回歩調をクリックした後にのみ気付いた。ただし、常にredBox
の下部に常に固執するようにredBox
を取得する方法と同じ質問が残ります。
解決
shwet-solanki に記載されているようにそれを試してくださいが、次の行を追加します。制約を変更した後:
[self.view layoutIfNeeded];
.
iBactionは次のようになります。
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
self.yellowBoxHeightConstraint.constant += 50;
[self.view layoutIfNeeded];
}];
}
.
yellowBoxHeightConstraint
はIBOutlet
の高さ制約のためのyellowBox
です。
お役に立てれば。
他のヒント
- Views の両方に高さ制約を追加
- yellowbox の高さ制約のためのiboutletを作成する
- ボタン押されたイベントのYellowBoxの高さを変更するのではなく、むしろ高さ制約の値を変更します。I.E iBoutletの制約名がyellowBoxHeightConstraint、次に
yellowBoxHeightConstraint.constant += 50;
の場合
これがあなたのために働くことを願っています。
//
// WPViewController.h
// AutoLayoutTEst
//
// Created by VASANTH K on 09/01/14.
//
//
#import <UIKit/UIKit.h>
@interface WPViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *button1;
- (IBAction)buttClicked:(id)sender;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstrain;
@property (strong, nonatomic) IBOutlet UIButton *button2;
@end
.
クリックイベント
- (IBAction)buttClicked:(id)sender {
self.heightConstrain.constant=100;
}
.
ここでは、黄色ボタン用のheightConstrain
を設定する必要があります。そのボタンの参照コンセントを作成してから、heightConstrain
を更新してそのボタンのサイズを更新すると、赤いボタンを自動的に移動します。
https://github.com/vasanth3008/autolayeighdemo
マイサンプルデモプロジェクト