聲明.剽竊自谷歌,看后瞬間理解深刻加深了原文地址
layoutSubviews 調(diào)用時(shí)機(jī)
一般baidu出來(lái)的答案如下,然而說(shuō)明并不夠透徹,在此補(bǔ)充說(shuō)明:
1、init初始化不會(huì)觸發(fā)layoutSubviews
2、addSubview會(huì)觸發(fā)layoutSubviews
3、設(shè)置view的Frame會(huì)觸發(fā)layoutSubviews,當(dāng)然前提是frame的值設(shè)置前后發(fā)生了變化
4、滾動(dòng)一個(gè)UIScrollView會(huì)觸發(fā)layoutSubviews
5、旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件
6、改變一個(gè)UIView大小的時(shí)候也會(huì)觸發(fā)父UIView上的layoutSubviews事件
首先:layoutSubviews 字面意思是: 布局子控件,也就是說(shuō)改變子控件會(huì)調(diào)用父類(lèi)該方法;
1、init初始化不會(huì)觸發(fā)layoutSubviews,
這點(diǎn)確實(shí)不會(huì)調(diào)用;
2、addSubview會(huì)觸發(fā)layoutSubviews,
如果添加的子控件沒(méi)有Frame,不會(huì)調(diào)用;
3、設(shè)置view的Frame會(huì)觸發(fā)layoutSubviews,當(dāng)然前提是frame的值設(shè)置前后發(fā)生了變化;
還有一個(gè)前提是該View 已經(jīng)被添加到父控件, 此時(shí)View和其父控件的layoutSubviews都會(huì)調(diào)用;
也就包含了6 的情況
4、滾動(dòng)一個(gè)UIScrollView會(huì)觸發(fā)layoutSubviews ,因滾動(dòng)UIScrollView,其子控件肯定對(duì)應(yīng)會(huì)刷新,也就肯定會(huì)被調(diào)用;
這點(diǎn)會(huì)調(diào)用;
5、旋轉(zhuǎn)Screen會(huì)觸發(fā)控制器對(duì)應(yīng)UIView上的layoutSubviews事件
做一點(diǎn)更正;
總結(jié):改變子控件就會(huì)調(diào)用父類(lèi)的方法;
參考文檔這樣說(shuō):
大概意思是:如果子控件的布局無(wú)法滿足需求,需要對(duì)子控件更改布局時(shí)可以重寫(xiě)layoutSubviews 直接改變之空間的Frame; 如果需要強(qiáng)制更新子控件的布局, 不能直接調(diào)用layoutSubviews,應(yīng)該調(diào)用setNeedsLayout;
Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.
You should not call this method directly. If you want to force a layout update, call thesetNeedsLayoutmethod instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call thelayoutIfNeededmethod.
邏輯教育視頻合集:
鏈接:https://pan.baidu.com/s/1kqiOB09jXG4aGXFXWKguZw 提取碼:j9Zq
如果被和諧聯(lián)系:2395660048