layoutSubviews & drawRect

layoutSubviews & drawRect觸發條件

- (void)layoutSubviews觸發情況

必要條件:view必須處於視圖樹中
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實現佈局

- (void)drawRect:(CGRect)rect觸發情況:
必要條件:view必須處於視圖樹中
1、第一次被添加到視圖樹時,並且size不爲0;
2、調用setNeedDisplay(異步調用,下一個runloop週期);
3、通過設置contentMode屬性值爲UIViewcontentModeRedraw,當frame的size改變時;

注:layoutSubview先於drawRect調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章