什么会触发viewDidLayoutSubviews并寻找一个好的模式来启动子视图框架

我有一个与Storyboard的自动布局结合的应用程序,一些旧的纯代码视图没有自动布局

在我的MainViewController中,我尝试初始化子视图,如边界,viewDidLayoutSubviews和viewWillAppear中的约束。 因为自动布局问题,我发现在viewDidLayoutSubviews中进行初始化是获得父视图边界的正确边界的最佳位置。

不过,我注意到viewDidLayoutSubviews将被完全解决之前调用2-3次,所以我必须处理,如果这是我第一次初始化我的子视图,或更新我的框架,如果一些约束改变或自动布局后大小改变。

现在我想改进它,但我无法弄清楚什么是调用viewDidLayoutSubviews几次。

我想要的最好的事情是只有一个viewDidLayoutSubviews将被调用,并在此之后,我可以得到正确的大小来初始化我的子视图。

我尝试search,但有些人说viewDidLayoutSubviews是由系统调用,所以不保证将被调用多less次。 如果是这种情况,使用autolayout子视图进行初始化的正确模式是什么?

viewDidLayoutSubiews在创buildviewController的过程中被多次调用 – 每次运行一次,在任何已经调用了setNeedsLayoutsetNeedsDisplayWithRect:视图上执行循环,而且之后在旋转设备,滚动等的情况下查看。 。

基本上,每次你的主视图的布局改变时都会调用它,所以你应该非常小心你添加到这个方法的代码,因为它可能会被多次执行。