创建自定义UIViewController
容器(包含其他UIViewControllers及其视图的UIViewController
)谁负责调用viewWillLayoutSubviews和viewDidLayoutSubviews?我的容器类有两个子控制器,当它移动到父视图控制器时,它们都没有调用这些方法。
UIViewController的beginAppearanceTransition(_:animated:)被记录为触发viewWillAppear()
,viewWillDisappear()
,viewDidAppear()
和viewDidDisappear()
的正确方式,但我看不到{{ 1}} / viewWillLayoutSubviews()
。
最好我可以看出父视图控制器(在这种情况下通过presentViewController(_:animated:completion:)呈现)负责在其自己的实现中调用其子控制器viewDidLayoutSubviews()
/ viewWillLayoutSubviews()
那些相同的方法。框架似乎在某些情况下调用这些方法(例如,当您设置viewDidLayoutSubviews()
的{{1}}属性时),而不是其他方式(例如,当您在rootViewController
中调用UIWindow
时)。
这是正确的,惯用的方式吗?
答案 0 :(得分:3)
谁负责调用viewWillLayoutSubviews和viewDidLayoutSubviews?
运行时。你不应该自己调用这些方法。
答案 1 :(得分:0)
基本上,当视图的边界由于任何原因而改变时。根据{{3}}:
当可见视图控制器发生旋转时,将在旋转期间调用willRotate(to:duration :),willAnimateRotation(to:duration :)和didRotate(from :)方法。在视图被其父级调整大小并定位后,还会调用viewWillLayoutSubviews()方法。如果在发生方向更改时视图控制器不可见,则永远不会调用旋转方法。但是,当视图变为可见时,将调用viewWillLayoutSubviews()方法。您可以使用此方法的实现调用statusBarOrientation方法来确定设备的方向。