UIViewanimation更改与自动布局约束
假设我有一个如下所示的项目:
有两个UIView
– 一个叫做yellowBox
,另一个叫redBox
。 自动布局约束规定yellowBox
距离超级视图的顶部60点,具有350点的前导和尾随空格(即,视图的左侧和右侧)。 redBox
具有相同的前后空格限制。 在两个0的框之间有一个垂直空间约束,表示yellowBox
框的底部应该总是直接在redBox
顶部。
当用户点击展开黄色框button时,我想要增加黄色框的高度,结果, redBox
向下移动以继续满足垂直空间限制( yellowBox
始终位于redBox
顶部)。 这里是animation代码:
- (IBAction)expandYellowBox:(id)sender { [UIView animateWithDuration:0.5 animations:^{ CGRect newFrame = self.yellowBox.frame; newFrame.size.height += 50; self.yellowBox.frame = newFrame; }]; }
不过,我一直无法正常工作。 正如你可以看到红色的图标,目前有一个约束的问题:
这是公平的,因为没有办法让自动布局知道盒子的高度。 但是,我不知道如何解决这个问题,这样可以调整箱子的大小和移动。 例如,如果我在yellowBox
上指定高度约束,那么将阻止它被resize。 如果我将高度约束设置为大于或等于 (允许yellowBox
高度增加),那么我得到一个不同的约束错误:
所有约束条件都是在故事板中使用Xcodebuild立的 – 没有一个是用代码编写的。
任何帮助不胜感激。
编辑:事实certificate,button被点击时, yellowBox
正在增长 – 这只是我不能说,因为它出现在redBox
后面。 我只是四次点击后才注意到,它开始出现在redBox
的底部。 然而,同样的问题仍然存在 – 如何让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
是yellowBoxHeightConstraint
高度约束的yellowBox
。 希望这可以帮助。
- 将高度约束添加到两个视图
- 为黄色的高度约束创build一个IBOutlet
- 现在,而不是更改button按下事件中的黄色框的高度,而是更改高度约束的值。 即假设您的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; }
在这里你需要为黄色button设置heightConstrain
,然后为该button创build引用出口,然后更新heightConstrain
来更新该button的大小,它会自动将红色button向下移动。
https://github.com/vasanth3008/AutoLayoutHeighDemo
请参考我的示例演示项目