修复了屏幕底部的UIView忽略NSLayoutConstraint更改

时间:2014-08-08 00:12:47

标签: ios xcode autolayout nslayoutconstraint

我在使用Xcode5的自动布局视图中遇到了这种奇怪的行为。

我有一个UIView固定在屏幕的底部,点击一个按钮,我将底部:0约束更新到底部:-60有效地将其移出可见屏幕。只要此UIView没有任何子视图,此动画就可以正常工作。

现在,我在此UIView中添加了两个UIButtons,并通过设置

触发了动画
[self.bottomConstraint setConstant:-60];

完全被忽略了。该视图及其两个UIButton子视图仍然可见,就好像self.bottomConstraint.constant仍为0

我认为这可能与translatedAutoresizingMasksToConstraints有关,所以我将其设置为NO。没有成功......想法我可能做错了什么?

谢谢!

2 个答案:

答案 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只是标记了视图,以便在下一个布局周期刷新它的布局。