layoutSubviews & drawRect觸發條件
- (void)layoutSubviews觸發情況:
1、當view的size發生變化時a、使用initWithFrame進行初始化時,rect的值不爲CGRectZero;b、爲view設置一個有變化的frame;c、view發生旋轉,且size發生變化時;2、當調用addSubview添加子視圖時a、調用addSubview添加子視圖(不論該子視圖是否已經添加);b、修改其subview的frame時;3、如果爲UIScrollView,發生滾動時;4、代碼控制
a、setNeedsLayout:標記需要重新佈局,異步調用layoutIfNeeded進行刷新佈局;b、layoutIfNeeded:如果有刷新的標記立即調用layoutSubviews進行佈局(如果沒有標記,不會調用)
注:如果需要強制立即刷新,則先要調用setNeedsLayout標記需要重新佈局,然後馬上調用layouIfNeed實現佈局
1、第一次被添加到視圖樹時,並且size不爲0;2、調用setNeedDisplay(異步調用,下一個runloop週期);3、通過設置contentMode屬性值爲UIViewcontentModeRedraw,當frame的size改變時;
注:layoutSubview先於drawRect調用