iOS-View Layout相關方法

相關方法

- (CGSize)sizeThatFits:(CGSize)size -

(void)sizeToFit
——————-

- (void)layoutSubviews

- (void)layoutIfNeeded

- (void)setNeedsLayout

——————–

- (void)setNeedsDisplay

- (void)drawRect

 

layoutSubviews調用的情況:

1.init初始化不會付出layoutSubviews,但是用initWithFrame初始化時,當rect不爲.zero時,也會觸發。

2.addsubViews會觸發

3.設置view的frame時會觸發,前提是frame和之前的frame不同

4.滾動UIScrollView會觸發

5.旋轉screen時會觸發父UIView上的layoutSubviews

6.改變一個UIView的大小時會觸發父UIView的layoutSubviews

layoutSubviews, 􏴋􏱙􏱚􏱈􏴚􏲷􏱣􏰈􏱜􏶏􏵑􏸏􏱽􏵏􏴆􏸟􏳸􏱟􏰫􏱡􏱢􏵑􏱊􏰥 􏵕􏴌􏳿􏰈􏵒􏽚􏵂􏰼􏳄􏰓􏱗􏱘􏳅􏶧􏱢􏱈􏴯􏶏􏱭􏳸subviews􏰈􏸟􏳸􏰫􏵂􏱛􏱢􏲶􏲙􏰥當我們在某個類的內部調整子視圖位置時,需要調用。即如果你想要在外部設置subviews的位置,就不要重寫。

刷新子對象佈局

-layoutSubview:默認沒有做任何事情,需要子類進行重寫

-setNeedslayout:標記爲需要重新佈局,異步調用layoutIfneeded刷新佈局,不會立即刷新,但一定會調用layoutSubviews

-layoutIfNeeded:如果有需要刷新的標記,立即調用layoutSubviews進行佈局(如果沒有標記,不會調用layoutSubviews)

備註:setNeedsLayout方法並不會立馬刷新,立即刷新需要調用layoutIfNeeded。

如果要立即刷新,要先調用[view setNeedsLayout],把標記設爲需要佈局,然後馬上調用[view layoutIfNeeded]實現佈局。

setNeedsLayout在receiver標上一個需要被重新佈局的標記,在系統runloop的下一個週期自動調用layoutSubviews.

layoutIfNeeded  UIKit會判斷該receiver是否需要layout,遍歷的不是superview鏈,二十subviews

在視圖第一次顯示之前,標記總是“需要刷新”,可以直接調用[view layoutIfNeeded]。

 

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