修复了屏幕底部的 UIView 会忽略 NSLayoutConstraint 的变化
Posted
技术标签:
【中文标题】修复了屏幕底部的 UIView 会忽略 NSLayoutConstraint 的变化【英文标题】:Fixed UIView at bottom of the screen ignores NSLayoutConstraint changes 【发布时间】:2014-08-08 00:12:46 【问题描述】:我在使用 Xcode5 的自动布局视图中遇到了这种奇怪的行为。
我将UIView
固定在屏幕底部,点击按钮后,我将bottom:0 约束更新为bottom:-60,这有效地将其移出可见屏幕。只要此 UIView 没有任何子视图,此动画就可以正常工作。
现在,我在这个 UIView 里面添加了两个UIButtons
和设置触发的动画
[self.bottomConstraint setConstant:-60];
被简单地忽略。视图及其两个 UIButton
子视图仍然可见,就好像 self.bottomConstraint.constant
仍然是 0
。
我认为这可能与translatedAutoresizingMasksToConstraints
有关,所以我将其设置为NO
。没有成功...想法我可能做错了什么?
谢谢!
【问题讨论】:
【参考方案1】:在您更改约束的常量后,在您的主视图(您在问题中引用的第一个 UIView 的超级视图)上调用此方法:
[mainView setNeedsLayout];
【讨论】:
【参考方案2】:如果您需要在更新约束后为布局更改设置动画,则需要在动画块中调用 layoutIfNeeded。
看起来像这样:
[self.bottomConstraint setConstant:-60];
[UIView animateWithDuration:0.2 animations:^
[view layoutIfNeeded]; // view is the UIView that contains your button
];
layoutIfNeeded
布局视图层次结构中的子视图,从您立即调用该方法的那个开始。 setNeedsLayout
只是将视图标记为在下一个布局周期刷新其布局。
【讨论】:
以上是关于修复了屏幕底部的 UIView 会忽略 NSLayoutConstraint 的变化的主要内容,如果未能解决你的问题,请参考以下文章