Ios 需要有关ViewDidLayoutSubView的帮助吗

Ios 需要有关ViewDidLayoutSubView的帮助吗,ios,objective-c,uiview,autolayout,calayer,Ios,Objective C,Uiview,Autolayout,Calayer,苹果的文档中关于viewDidLayoutSubviews的内容如下: 当视图控制器视图的边界更改时,视图 调整其子视图的位置,然后系统调用 方法。但是,调用此方法并不表示 已调整视图子视图的各个布局。每个子视图 子视图负责调整自己的布局 视图控制器可以覆盖此方法,以便在视图布局其子视图后进行更改。此方法的默认实现 方法不起任何作用 我有view1,其中包含view2意味着view2是view1的子视图。我正在为我的view2创建一个CALayer,我希望它的大小精确到view2。我正在使用au

苹果的文档中关于viewDidLayoutSubviews的内容如下:

当视图控制器视图的边界更改时,视图 调整其子视图的位置,然后系统调用 方法。但是,调用此方法并不表示 已调整视图子视图的各个布局。每个子视图 子视图负责调整自己的布局

视图控制器可以覆盖此方法,以便在视图布局其子视图后进行更改。此方法的默认实现 方法不起任何作用

我有
view1
,其中包含
view2
意味着
view2
view1
的子视图。我正在为我的
view2
创建一个
CALayer
,我希望它的大小精确到
view2
。我正在使用
auto layouts
,因此我想在
auto layout
完成工作时创建
CALayer
,以便为
CALayer
框架设置正确的值


但是在
viewdilayoutsubviews
方法中,我无法检测到
view2
frame是由
auto layout
设置的,因为苹果文档也这么说的

正在调用的此方法并不表示 视图子视图的布局已调整

在苹果医生说

视图控制器可以重写此方法,以便在之后进行更改 视图将显示其子视图


我很困惑,
auto layout
将在什么时候设置
view2
框架,这样我就可以相应地设置
CALayer
框架。

正如我在评论中提到的,如果视图与auto layout对齐,您不必做任何特殊的事情。如果希望单个图层将其边界调整为视图的边界,最简单和正确的方法是覆盖视图的
layerClass
方法-在这种情况下,图层边界将在视图内自动调整。如果除了标准层之外还需要一个层,更新层边界的最佳位置可能是
setFrame:
methodoverride


viewDidLayoutSubviews
开始,它只是一个事件,通知您viewcontroller根视图的所有子视图都位于所需的位置。不能保证这些子视图的所有其余子视图也将对齐,因为这是父视图本身的责任。它们可以是自动布局定位和手动布局定位。此事件也不能保证所有视图都按需要显示,特别是当它们的帧更改已设置动画时。

如果您只需要自动调整层边界-只需将
layerClass
方法覆盖到您的layer@Sega-请提供一个小例子或片段,这将非常有帮助。但我仍然无法确定自动布局何时完成其工作,我的特定视图何时有框架,何时可以使用框架值(用于任何目的)。
viewdilayoutsubviews
是确保viewcontroller视图的子视图正确对齐的正确位置,但这并不是一个你可以确定它们会相应地显示在屏幕上的地方。而且,这并不是您可以确保根子视图的所有子视图都对齐的地方——这是子视图的责任(文档说得很清楚)。通常,使用自动布局,您不需要做任何额外的工作。但您始终可以重写
setFrame:
方法,以捕捉特定视图的正确位置。