NSLayoutConstraint 自行重新激活
Posted
技术标签:
【中文标题】NSLayoutConstraint 自行重新激活【英文标题】:NSLayoutConstraint re-activates by itself 【发布时间】:2017-03-29 13:32:21 【问题描述】:我在.xib
文件中为UILabel
创建了strong
约束,并为其创建了一个出口。
在我的代码中,我设置了self.constraint.active = NO
,但在应用程序加载后,当我打开Debug View Hierarchy
时,同样的约束处于活动状态。
我尝试将其设置为viewDidLoad
、updateViewConstraints
和viewDidLayoutSubviews
,但无济于事。
我还创建了一个NSLayoutConstraint
子类,重写了setActive:
方法并在其中放置了一个断点,但只有我的代码触发了它。
【问题讨论】:
你是什么意思重新激活它自己?约束是什么? @giorashc,等一下,我点击enter
以从弹出窗口中添加一个标签,它决定改为发布问题-_-
您在代码中的哪个位置将活动设置为NO
?另外,您的插座是weak
还是strong
?我相信约束出口必须是strong
。
如果您尝试在viewDidAppear
中将其设置为NO
会发生什么?
@Hodson,它有效!但这没有任何意义。为什么viewDidAppear:
之后还有一个布局pass?
【参考方案1】:
在使用约束时,我建议尽可能晚地进行。根据您的情况,最早可能是viewDidLoad
。
无论您最终做什么,都可以通过layoutIfNeeded
调用强制刷新。
如果我没记错的话,您可以禁用约束,然后强制更新约束/布局 (updateConstraints
setNeedsLayout
),然后调用 layoutIfNeeded
。但我认为您只需要修改您的约束,这样做会自动将您的视图设置为在有时间或调用layoutIfNeeded
时自行重新布局。
无论哪种方式,请尝试仅使用这两行,否则,添加我放在括号之间的那些。
我不会撒谎,有时约束是部分 ios、部分技能、部分黑魔法。
【讨论】:
以上是关于NSLayoutConstraint 自行重新激活的主要内容,如果未能解决你的问题,请参考以下文章
重新激活 NSLayoutConstraint 在展开可选时发现 nil