我正在阅读 UIViewController
的 viewDidLayoutSubviews
的描述:
Called to notify the view controller that its view has just laid out its subviews [...] However, this method being called does not indicate that the individual layouts of the view's subviews have been adjusted. Each subview is responsible for adjusting its own layout [...].
对我来说,这意味着:“当 subview 布局完成时调用,但实际上这不是真的”。那么 viewDidLayoutSubviews
背后到底是什么?
最佳答案
当 ViewControllers View 的边界发生变化时,此方法会在 subview 的位置和大小发生变化后被调用。
因此,这是我们在布局其 subview 之后但在屏幕上可见之前对 View 进行更改的机会。
任何必须根据边界进行的更改,我们可以在这里进行,而不是在 ViewDidLoad 或 ViewWillAppear 中进行。
当 ViewDidLoad 和 ViewWillAppear 时, View 的框架和边界是 没有最终确定。因此,当 AutoLayout 完成修复 mainView 和 它是 subview ,调用此方法。
当使用自动布局时,框架不会每次都调用 layoutSubviews。在这些情况下会调用它。
旋转设备:仅在父 View (响应的 viewControllers 主视图)上调用 layoutSubview
它自己的边界(不是框架)改变了。 (仅当新值不同(包括不同的来源)时,才认为边界已更改。)
- 将 subview 添加到 View 或从 View 中删除。
- 您的应用程序通过调用 View 的
setNeedsLayout
或layoutIfNeeded
方法强制进行布局。 - 滚动 UIScrollView 会导致在 scrollView 及其父 View 上调用 layoutSubviews。
注意: 对 viewDidLayoutSubviews 的调用还取决于各种因素,例如自动调整大小掩码、是否使用自动布局以及 View 是否在 View 层次结构中。
如需任何其他说明,请查看 When is layoutSubviews called?
关于ios - 什么是 viewDidLayoutSubviews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40737164/