次のようなプロジェクトがあるとします。
UIView
が2つあります。1つはyellowBox
と呼ばれ、もう1つはredBox
と呼ばれます。自動レイアウトの制約は、yellowBox
がスーパービューの上部から60ポイントで、350ポイントの前後スペース(つまり、ビューの左右)であることを示しています。 redBox
には、先頭と末尾に同じスペース制約があります。 0の2つのボックスの間に垂直スペースの制約があり、yellowBox
の下部が常にredBox
の上部に常にあることを示します。
ユーザーが[黄色のボックスを展開]ボタンをタップすると、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
を常にyellowBox
の下部に固定する方法。
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
です。お役に立てれば。
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/AutoLayoutHeighDemo
サンプルデモプロジェクトを参照してください