使用纯代码在xib创建的viewController中添加控件

解决问题: 将要添加的代码写到:viewDidLayoutSubviews方法中

最近遇见一个问题:

xib控制器有一个图片已经设置好,现在想用纯代码给controller中添加控件。

在viewDidLoad中添加代码 ,运行发现frame不是自己想要的

查了下资料记录一下:

为什么不能放viewDidLoad中?

因为autoLayout是在viewDidLoad之后计算的。viewDidLoad方法中获得的尺寸并不是完全正确的。如果纯代码添加的控件和原有的xib创建的控件有约束关系,必须放在viewDidLayoutSubviews方法中添加。

这是方法的官方解释:

When the bounds change for a view controller's view, the view adjusts the positions of its subviews and then the system calls this method.

自己测试一下发现viewDidAppear中也可以获取完全正确的frame,但UI效果不理想,控件会闪一下,这个时候说明时机有点晚,所以最好还是放viewDidLayoutSubviews中去添加控件或者操作有关控件frame的东西。

其实我们习以为常的代码有好多细节需要理解和注意。

你可能感兴趣的:(使用纯代码在xib创建的viewController中添加控件)