swift不确定layoutIfNeeded setNeedsUpdateConstraints或updateConstraints setNeedsLayout

时间:2015-07-21 20:22:07

标签: ios swift

我正在调用API。根据我得到的json数据,我在viewDidLoad()中调整我的视图控制器,以便更改我的视图设计,以便尽可能地显示给定数据。

我所做的是隐藏一些uiView并将其约束设置为.active = false,但也可以通过以下方式更改某些约束:

let noCButton = NSLayoutConstraint(item: aListTop, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: aListBottom, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
        view.addConstraint(noBidButton)

然后在关闭viewDidLoad()之前我更改/禁用某些约束我调用view.layoutIfNeeded()

所以现在我的问题是,

如果我更改/禁用某些约束或隐藏uiview,我之后是否应该总是致电view.layoutIfNeeded()

此外,我是否需要在每次更改后立即致电view.layoutIfNeeded(),或者我可以在关闭viewDidLoad()之前简单地调用一次?

我的控制台无论如何都没有任何错误,但我只是想确保以正确的方式做到这一点。我还注意到像updateConstraints这样的函数,但layoutIfNeeded似乎有用,所以我不能100%确定差异

提前致谢,

1 个答案:

答案 0 :(得分:3)

我会打电话给view.setNeedsUpdateConstraints()。在viewDidLoad()之后,应自动调用viewWillLayoutSubviews()。这应该就是你现在需要做的一切。

如果您需要强制视图立即更新,请致电view.layoutIfNeeded(),如果您想要进行一组更改,然后在下一个布局过程中全部应用这些更改,请在结束时调用view.setNeedsLayout()你所有的改变。