了解一下layoutSubviews

下面列出View的layout的方法:

layoutSubviews
layoutIfNeeded
setNeedsLayout
setNeedsDisplay
drawRect
sizeThatFits
sizeToFit

下面進(jìn)行驗(yàn)證

  • 1.layoutSubviews

先來看看蘋果官方文檔

| Description | 

Lays out subviews.

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.

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 the [setNeedsLayout](apple-
reference-documentation:/hcKxHs2z9R) 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](apple-reference-documentation://hcR6Nt0dCa) method.
-------------------------------------------------------------------------------------------------------------------------
翻譯
此方法的默認(rèn)實(shí)現(xiàn)在iOS 5.1及更早版本中不執(zhí)行任何操作。 否則温治,默認(rèn)
實(shí)現(xiàn)使用您設(shè)置的任何約束來確定任何子視圖的大小和位置像屋。

子類可以根據(jù)需要覆蓋此方法,以執(zhí)行其子視圖的更精確布局哨苛。 你應(yīng)該
僅當(dāng)子視圖的自動(dòng)調(diào)整和基于約束的行為不提供所需的行為時(shí)才覆蓋此方法。 你可以使用你的
實(shí)現(xiàn)直接設(shè)置子視圖的框架矩形币砂。

您不應(yīng)該直接調(diào)用此方法建峭。 如果要強(qiáng)制進(jìn)行布局更新,請(qǐng)調(diào)用setNeedsLayout方法改為在下次繪圖更新之前執(zhí)行此操作决摧。 如果你想立即更新視圖的
布局亿蒸,調(diào)用layoutIfNeeded方法凑兰。

這個(gè)方法本身不會(huì)做任何事情,需要在子類中重寫边锁,那么姑食,什么時(shí)候會(huì)觸發(fā)此方法呢?

1.直接調(diào)用[self setNeedsLayout];(這個(gè)在上面蘋果官方文檔里有說明)
2.addSubview時(shí)
3.view的frame的值設(shè)置前后發(fā)生了變化
4.滑動(dòng)UIScrollView的時(shí)
5.旋轉(zhuǎn)Screen會(huì)觸發(fā)父UIView上的layoutSubviews事件(有人說旋轉(zhuǎn)時(shí)不會(huì)觸發(fā)茅坛,我這里試了模擬器和真機(jī)都是可以的)

1.自定義一個(gè)view繼承UIView
@implementation TestView
- (void)layoutSubviews{
    NSLog(@"heloo");
}

2.初始化添加到view上
#import "ViewController.h"
#import "TestView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    TestView * test = [[TestView alloc]init];
    [self.view addSubview:test];
}

可以看到觸發(fā)了方法
屏幕快照 2018-10-10 下午2.36.31.png

frame在發(fā)生改變時(shí)也會(huì)觸發(fā)音半,這里觸發(fā)了兩次
屏幕快照 2018-10-10 下午2.38.11.png
  • 2. layoutIfNeeded

使用約束的時(shí)候 調(diào)一下可以立即更新效果
setNeedsLayout方法并不會(huì)立即刷新,立即刷新需要調(diào)用layoutIfNeeded方法贡蓖!

  • 3. setNeedsDisplay

與setNeedsLayout方法相似的方法是setNeedsDisplay方法曹鸠。該方法在調(diào)用時(shí),會(huì)自動(dòng)調(diào)用drawRect方法斥铺。drawRect方法主要用來畫圖彻桃。所以,當(dāng)需要刷新布局時(shí)晾蜘,用setNeedsLayOut方法邻眷;當(dāng)需要重新繪畫時(shí),調(diào)用setNeedsDisplay方法剔交。

  • 4. sizeThatFits肆饶、sizeToFit

在使用UILabel的時(shí)候會(huì)用到,使用這兩個(gè)方法之前省容,必須要給label賦值抖拴,否則不會(huì)顯示內(nèi)容

[testLabel sizeThatFits:CGSizeMake(20, 20)];//會(huì)計(jì)算出最優(yōu)的 size 但是不會(huì)改變 自己的 size,個(gè)人認(rèn)為這個(gè)就是 label 自適應(yīng)大小有用別的沒什么用
[testLabel sizeToFit];//會(huì)計(jì)算出最優(yōu)的 size 而且會(huì)改變自己的size
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腥椒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子候衍,更是在濱河造成了極大的恐慌笼蛛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛉鹿,死亡現(xiàn)場離奇詭異滨砍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妖异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門惋戏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人他膳,你說我怎么就攤上這事响逢。” “怎么了棕孙?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵舔亭,是天一觀的道長些膨。 經(jīng)常有香客問我,道長钦铺,這世上最難降的妖魔是什么订雾? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮矛洞,結(jié)果婚禮上洼哎,老公的妹妹穿的比我還像新娘。我一直安慰自己沼本,他們只是感情好谱净,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著擅威,像睡著了一般壕探。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上郊丛,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天李请,我揣著相機(jī)與錄音,去河邊找鬼厉熟。 笑死导盅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揍瑟。 我是一名探鬼主播白翻,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绢片!你這毒婦竟也來了滤馍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤底循,失蹤者是張志新(化名)和其女友劉穎巢株,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熙涤,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阁苞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祠挫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片那槽。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖等舔,靈堂內(nèi)的尸體忽然破棺而出骚灸,到底是詐尸還是另有隱情,我是刑警寧澤软瞎,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布逢唤,位于F島的核電站拉讯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳖藕。R本人自食惡果不足惜魔慷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望著恩。 院中可真熱鬧院尔,春花似錦、人聲如沸喉誊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伍茄。三九已至栋盹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敷矫,已是汗流浹背例获。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曹仗,地道東北人榨汤。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像怎茫,于是被迫代替她去往敵國和親收壕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容