談談UIView的幾個layout方法-layoutSubviews、layoutIfNeeded、

從百度上搜索了一下layoutSubviews的用處,如下是搜索的結果,固然,筆者是會一一驗證的.ide

一、 init初始化不會觸發layoutSubviews佈局

二、 addSubview會觸發layoutSubviewsthis

三、 設置view的Frame會觸發layoutSubviews,固然前提是frame的值設置先後發生了變化spa

四、 滾動一個UIScrollView會觸發layoutSubviewsorm

五、 旋轉Screen會觸發父UIView上的layoutSubviews事件事件

六、 改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件ci

在開始驗證以前,先看看layoutSubviews究竟是啥來着:)it

Lays out subviews.io

The default implementation of this method does nothing on iOS 5.1 and earlier. Otherwise, the default implementation uses any constraints you have set to determine the size and position of any subviews.form

在iOS5.1或以前的版本中,這個方法什麼也沒幹.這個方法的默認實現是 用參數來設定subviews的尺寸和位置的 .

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.

若是你須要更加精確的佈局,能夠在子類裏面重寫這個方法.僅僅在如下狀況下:自動佈局達不到你想要效果時你纔有必要重寫這個方法.你能夠直接設置subviews的尺寸.

You should not call this method directly. If you want to force a layout update, call the setNeedsLayout method instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded method.

你不能直接調用這個方法.若是你須要強制layout刷新,調用setNeedsLayout來代替.若是你想要當即刷新你的view,調用layoutIfNeeded

大概總結如下就是:

你不要直接調用方法layoutSubviews,若是想要刷新,請調用 setNeedsLayout 或者layoutIfNeeded


1. 一個view是不可以本身調用layoutSubviews,若是要調用,須要調用setNeedsLayout或者 layoutIfNeeded

2. 若是view的frame值爲0,即便被添加了耶不會調用layoutSubviews

3. 若是一個view的frame值改變了,那麼它的父類的layoutSubviews也會被執行

相關文章
相關標籤/搜索