本文說一個莫名其妙的錯誤,控制臺輸出如下:
由圖片紅色劃線看出:子控件的高度=父控件的高度-某個數字,而項目中子控件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里面的子控件尺寸發生改變的時候會調用