国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

(轉(zhuǎn))layoutSubviews總結(jié)

2019-11-14 20:15:35
字體:
供稿:網(wǎng)友

一直對layoutSubviews不怎么明白,看到這篇文章轉(zhuǎn)一下:

layoutSubviews總結(jié)

ios layout機制相關(guān)方法

- (CGSize)sizeThatFits:(CGSize)size
- (void)sizeToFit
——————-

- (void)layoutSubviews
- (void)layoutIfNeeded
- (void)setNeedsLayout
——————–

- (void)setNeedsDisplay
- (void)drawRect
layoutSubviews在以下情況下會被調(diào)用:

1、init初始化不會觸發(fā)layoutSubviews

   但是是用initWithFrame 進行初始化時,當rect的值不為CGRectZero時,也會觸發(fā)

2、addSubview會觸發(fā)layoutSubviews

3、設(shè)置view的Frame會觸發(fā)layoutSubviews,當然前提是frame的值設(shè)置前后發(fā)生了變化

4、滾動一個UIScrollView會觸發(fā)layoutSubviews

5、旋轉(zhuǎn)Screen會觸發(fā)父UIView上的layoutSubviews事件

6、改變一個UIView大小的時候也會觸發(fā)父UIView上的layoutSubviews事件

在蘋果的官方文檔中強調(diào):

      You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.

layoutSubviews, 當我們在某個類的內(nèi)部調(diào)整子視圖位置時,需要調(diào)用。

反過來的意思就是說:如果你想要在外部設(shè)置subviews的位置,就不要重寫。

刷新子對象布局

-layoutSubviews方法:這個方法,默認沒有做任何事情,需要子類進行重寫
-setNeedsLayout方法: 標記為需要重新布局,異步調(diào)用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定會被調(diào)用
-layoutIfNeeded方法:如果,有需要刷新的標記,立即調(diào)用layoutSubviews進行布局(如果沒有標記,不會調(diào)用layoutSubviews)

如果要立即刷新,要先調(diào)用[view setNeedsLayout],把標記設(shè)為需要布局,然后馬上調(diào)用[view layoutIfNeeded],實現(xiàn)布局

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

重繪

-drawRect:(CGRect)rect方法:重寫此方法,執(zhí)行重繪任務(wù)
-setNeedsDisplay方法:標記為需要重繪,異步調(diào)用drawRect
-setNeedsDisplayInRect:(CGRect)invalidRect方法:標記為需要局部重繪

sizeToFit會自動調(diào)用sizeThatFits方法;

sizeToFit不應(yīng)該在子類中被重寫,應(yīng)該重寫sizeThatFits

sizeThatFits傳入的參數(shù)是receiver當前的size,返回一個適合的size

sizeToFit可以被手動直接調(diào)用

sizeToFit和sizeThatFits方法都沒有遞歸,對subviews也不負責(zé),只負責(zé)自己

———————————-

layoutSubviews對subviews重新布局

layoutSubviews方法調(diào)用先于drawRect

setNeedsLayout在receiver標上一個需要被重新布局的標記,在系統(tǒng)runloop的下一個周期自動調(diào)用layoutSubviews

layoutIfNeeded方法如其名,UIKit會判斷該receiver是否需要layout.根據(jù)Apple官方文檔,layoutIfNeeded方法應(yīng)該是這樣的

layoutIfNeeded遍歷的不是superview鏈,應(yīng)該是subviews鏈

drawRect是對receiver的重繪,能獲得context

setNeedDisplay在receiver標上一個需要被重新繪圖的標記,在下一個draw周期自動重繪,iphone device的刷新頻率是60hz,也就是1/60秒后重繪 

 

原文鏈接:http://www.cocoachina.com/bbs/read.php?tid=111832


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 榆中县| 竹山县| 子洲县| 措美县| 禄劝| 西安市| 尚志市| 淮滨县| 淅川县| 江口县| 香格里拉县| 梁河县| 循化| 阜新市| 内黄县| 平乡县| 甘谷县| 神农架林区| 宁明县| 长海县| 定安县| 临桂县| 黄石市| 孝感市| 汉沽区| 华池县| 眉山市| 昔阳县| 大兴区| 威信县| 海兴县| 宾阳县| 凤山市| 乡城县| 葫芦岛市| 林口县| 荆州市| 霍邱县| 海安县| 寻乌县| 泰宁县|