关于autoresizingMask的莫名错误 && viewDidLoad和viewDidLayoutSubviews

本文说一个莫名其妙的错误,控制台输出如下:


由图片红色划线看出:子控件的高度=父控件的高度-某个数字,而项目中子控件TopicVoiceView是由xib显示的,但是代码里面又没有设置他关于父控件高度的某些关系,所以根据经验可猜测跟autoresizingMask(尺寸自动调整)有关系
解决办法如下:
可在TopicVoiceView写上如下代码取消autoresizingMask



viewDidLoad和viewDidLayoutSubviews

1.如果控制器的view是通过xib创建的,那么在viewDidLoad方法中,控制器view的大小就是xib中设置的大小
2.为了避免【在viewDidLoad方法中拿到不准确的控制器view大小】,可以这么解决
1> 在viewDidLoad方法中初始化添加子控件,在viewDidLayoutSubviews方法中设置子控件的frame
2>直接viewDidLoad方法中为所添加的view设置属性

autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

所以不要在viewDidLoad中,因为在该方法中不会执行约束,在viewDidLoad中控件的尺寸都不是最终尺寸
在 viewDidLayoutSubviews,该方法表示执行约束完成,是专门用来布局子控件(当控制器的view尺寸发生改变的时候会调用)
LayoutSubviews 是当view里面的子控件尺寸发生改变的时候会调用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容