2015-07-21 62 views
2

我调用API。根据我回来的json数据,我正在执行我的视图控制器viewDidLoad(),以便将视图设计更改为以最佳方式显示给定数据。迅速没把握layoutIfNeeded setNeedsUpdateConstraints或updateConstraints setNeedsLayout

我做的是隐藏一些uiViews并设置其约束条件是。主动= false,但也改变了一些约束,例如通过:刚刚闭幕的viewDidLoad(),我改变之前

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

然后/禁用一些限制,我叫view.layoutIfNeeded()

所以我现在的问题是,

如果我改变/禁用某些限制或隐藏一个UIView,我应该始终调用view.layoutIfNeeded()后来呢?

另外,是否需要在每次更改后立即调用view.layoutIfNeeded(),或者我可以在关闭viewDidLoad()之前调用它一次吗?

我不明白我的控制台无论哪种方式的任何错误,但我只是想确认我在做正确的方式。我也注意到功能,如updateConstraints但layoutIfNeeded似乎工作,寿即时消息不是100%肯定的差异提前

感谢,

回答

3

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

如果您需要强制视图立即更新打电话view.layoutIfNeeded(),如果你想使一组更改,然后让他们所有的下一个布局应用于通就叫view.setNeedsLayout()在所有更改结束。

+0

为什么不能我就跑view.layoutIfNeeded()?它现在不输出任何错误。而且,因为我只是在进行更改,因此我只能在viewDidLoad – user2722667

+0

中进行更改。很抱歉,没有看到您的修改。好,谢谢!然后,我将在viewDidLoad中调用view.setNeedsLayout()?因为我没有让我的变化,我不想,直到我已经把我的变化 – user2722667

+0

你可能甚至不需要调用setNeedsLayout,因为这将viewDidLoad中之后进行反正显示视图。 – jervine10