什么是viewDidLayoutSubviews?

Mar*_*ard 6 uikit ios

我读的描述viewDidLayoutSubviewsUIViewController:

调用以通知视图控制器其视图刚刚布置了其子视图[...]但是,此方法被调用并不表示已调整视图子视图的各个布局.每个子视图负责调整自己的布局[...].

对我来说,这意味着:"当子视图的布局完成时调用,但实际上这不是真的".那真的落后了viewDidLayoutSubviews什么?

Uda*_*y.M 19

当ViewControllers视图的边界更改时,在子视图的位置和大小发生更改后调用此方法.

  1. 所以这是我们在布局子视图之后但在屏幕上显示之前对视图进行更改的机会.

  2. 任何取决于边界的更改都必须完成,我们可以在此处而不是在ViewDidLoad或ViewWillAppear中完成.

  3. 在ViewDidLoad和ViewWillAppear中,视图的边框和边界尚未最终确定.因此,当AutoLayout完成修复mainView及其子视图的工作时,会调用此方法.

使用autolayout时,框架不会每次都调用layoutSubviews.在这些情况下调用它.

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

  • 它自己的边界(不是框架)改变了.(仅当新值不同,包括不同的原点时,才会考虑更改边界.)

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

注意:对viewDidLayoutSubviews的调用还取决于各种因素,如自动调整大小屏蔽,是否使用自动布局,以及视图是否在视图层次结构中.

对于任何其他说明,请检查 何时调用layoutSubviews?

  • 非常好地解释 (2认同)