layoutSubviews()和viewWillLayoutSubviews()之间的区别

时间:2016-09-21 01:18:06

标签: ios swift uiview uiviewcontroller

我了解layoutSubviews()UIView中的一种方法,而viewWillLayoutSubviews()UIViewController中的一种方法,它们都用于在界限时调整子视图的位置/ frame更改,但我不确定它们之间的区别以及何时使用它们。有人可以赐教吗?

3 个答案:

答案 0 :(得分:7)

没有有效的区别。一个(layoutSubviews)是运行时发送给视图的消息,另一个(viewWillLayoutSubviews)是运行时发送给视图控制器的消息。到视图控制器的消息告诉视图控制器它的视图即将接收视图消息!这就是全部。他们一起去。

答案 1 :(得分:2)

当视图控制器的视图边界发生变化时,会调用

viewWillLayoutSubviews(通常在视图加载或轮换发生变化时,或者如果它是子视图控制器,并且其视图为由父视图控制器改变,但在它的子视图边界或位置变化之前。您可以覆盖此方法,以便在视图布局之前对子视图的边界或位置进行一些更改。

layoutSubviews来自Apple的documentation

  

只有当子视图的自动调整和基于约束的行为不提供您想要的行为时,才应覆盖此方法

在布局更新发生时调用此方法,方法是显式更改视图边界或在视图上调用setNeedsLayoutlayoutIfNeeded以强制进行布局更新。请记住它会被操作系统自动调用,你永远不应该直接调用它。您需要覆盖此方法非常罕见,因为通常自动调整大小或约束将为您完成工作。

答案 2 :(得分:0)

当您更改UIView内部的任何约束值时,您可以调用UIView的layoutSubviews(),并且约束更改会影响一个元素。当您通过在运行时获取约束的出口来更改约束来执行某些任务时,您可以调用它。但这不是最佳做法。我建议拨打layoutIfNeeded()而不是layoutSubviews()

如果要在任何元素在视图控制器中更改其大小或位置之前执行某项任务,则需要使用viewWillLayoutSubviews()函数。

当您打算申请时,这两个功能在最坏的情况下很少使用。这是我的理解。感谢。