【发布时间】:2015-07-22 21:10:44
【问题描述】:
我有两个视图,一个可见(灰色) 和 一个隐藏(红色)。可见视图约束到superview 顶部,常量为32,另一个约束到superview 顶部,常量为16。
可见视图的顶部也被限制在隐藏视图的底部,常量为8。此约束的优先级为749,因为它最初是不可满足的。
这个想法是可见(灰色)视图通常应该比父视图低 32 点,但是当隐藏(红色)视图变为可见时,原始(灰色)视图应该比另一个视图(红色)低 8 点)。
我通过保持对32-point 约束的强烈引用来实现这一点,并在我隐藏/取消隐藏视图(红色)时使其处于活动/非活动状态。
这是我的布局图片:
这通常工作得很好,但我一直在尝试在viewDidLoad 中设置constraint.active = NO 和redView.hidden = NO,因为如果不满足某个条件,我需要文本字段显示错误。出于某种原因,这不起作用。红色视图按预期显示,但第二个视图(灰色)没有按应有的方式向下移动(它不遵守749 约束,即使主约束不再处于活动状态)。这是结果的图片:
但是,我编写了代码来停用约束并在一小段延迟后显示视图运行(使用dispatch_after();),然后它突然按预期工作:
我的问题是:当视图从viewDidLoad 立即运行时,为什么视图不尊重约束并向下移动?为什么它在一小段延迟后突然起作用?这是实现我的目标的一个不错的解决方案,因为我可以让它正常工作吗?
【问题讨论】:
标签: ios objective-c nslayoutconstraint autolayout