本文说一个莫名其妙的错误,控制台输出如下:
由图片红色划线看出:子控件的高度=父控件的高度-某个数字,而项目中子控件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里面的子控件尺寸发生改变的时候会调用