ios - 什么是 viewDidLayoutSubviews?

标签 ios uiviewcontroller uikit bounds viewdidlayoutsubviews

我正在阅读 UIViewControllerviewDidLayoutSubviews 的描述:

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 的位置和大小发生变化后被调用。

  1. 因此,这是我们在布局其 subview 之后但在屏幕上可见之前对 View 进行更改的机会。

  2. 任何必须根据边界进行的更改,我们可以在这里进行,而不是在 ViewDidLoad 或 ViewWillAppear 中进行。

  3. 当 ViewDidLoad 和 ViewWillAppear 时, View 的框架和边界是 没有最终确定。因此,当 AutoLayout 完成修复 mainView 和 它是 subview ,调用此方法。

当使用自动布局时,框架不会每次都调用 layoutSubviews。在这些情况下会调用它。

  • 旋转设备:仅在父 View (响应的 viewControllers 主视图)上调用 layoutSubview

  • 它自己的边界(不是框架)改变了。 (仅当新值不同(包括不同的来源)时,才认为边界已更改。)

  • 将 subview 添加到 View 或从 View 中删除。
  • 您的应用程序通过调用 View 的 setNeedsLayoutlayoutIfNeeded 方法强制进行布局。
  • 滚动 UIScrollView 会导致在 scrollView 及其父 View 上调用 layoutSubviews。

注意: 对 viewDidLayoutSubviews 的调用还取决于各种因素,例如自动调整大小掩码、是否使用自动布局以及 View 是否在 View 层次结构中。

如需任何其他说明,请查看 When is layoutSubviews called?

关于ios - 什么是 viewDidLayoutSubviews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40737164/

相关文章:

ios - iOS 设备上的编码对象问题

swift - 如何从 SwiftUI View 导航到 UIKit UIViewController

ios - Xcode 10、Swift 4 - 如何跨多个 View Controller 传输数据?

iphone - UIViewController:viewWillAppear被调用,viewDidAppear没有被调用

ios - 当新用户使用 Swift 和 Parse 登录时,数据不会更新到当前用户

iphone - 如何创建 session ?

ios - supportedInterfaceOrientations 不工作

ios - 延迟 IBAction 按钮

ios - fatal error : could not demangle keypath type

objective-c - 从 UIButton 中获取 UILabel