我在使用Xcode5的自动布局视图中遇到了这种奇怪的行为。
我有一个UIView
固定在屏幕的底部,点击一个按钮,我将底部:0约束更新到底部:-60有效地将其移出可见屏幕。只要此UIView没有任何子视图,此动画就可以正常工作。
现在,我在此UIView中添加了两个UIButtons
,并通过设置
[self.bottomConstraint setConstant:-60];
完全被忽略了。该视图及其两个UIButton
子视图仍然可见,就好像self.bottomConstraint.constant
仍为0
。
我认为这可能与translatedAutoresizingMasksToConstraints
有关,所以我将其设置为NO
。没有成功......想法我可能做错了什么?
谢谢!
答案 0 :(得分:0)
在更改约束常量后,在主视图(您在问题中引用的第一个UIView的超级视图)上调用此方法:
[mainView setNeedsLayout];
答案 1 :(得分:0)
如果需要在更新约束后对布局更改进行动画处理,则需要在动画块中调用layoutIfNeeded。
它看起来像这样:
[self.bottomConstraint setConstant:-60];
[UIView animateWithDuration:0.2 animations:^{
[view layoutIfNeeded]; // view is the UIView that contains your button
}];
layoutIfNeeded
布局视图层次结构中的子视图,从您立即调用方法的视图开始。 setNeedsLayout
只是标记了视图,以便在下一个布局周期刷新它的布局。