史上最詳細最清楚的layoutSubView什麼時候調用文章

1.init初始化 和 initWithFrame初始化都不會調用layoutSubViewspa

2. addsubView會觸發layoutSubViews,orm

當TestView.frame  = {0,0,0,0}時;事件

TestView *test = [[TestView alloc] init];圖片

[self.view addSubview:test];it

frame = 0沒有繪製,因此不會調用TestView類的layoutSubviews方法test

 

當TestView.frame  = !{0,0,0,0}時;scroll

TestView *test = [[TestView alloc] init];方法

test.frame = CGRectMake(0, 0, 100, 100);im

[self.view addSubview:test];layout

有frame,會調用TestView類的layoutSubviews方法

 

3. 當往自定義View上添加子控件的時候,無論子控件有沒有尺寸都會調用自定義View的layoutsubviews

   // 添加子控件的時候都會調用

    CustomBtn *button = [[CustomBtn alloc] init];

[self.sbView addSubview:button];

推論:(不太肯定)

[XXXX addSubview:OOOO]; XXXX 和 OOOO 的layoutSubViews方法都會被調用。

 

4.設置自定義view的Frame會觸發自定義View的layoutSubviews,前提是frame的值設置先後發生了變化(view的with,height發現變化纔會觸發layoutSubviews,original. x ,original. y變化不會觸發layoutSubviews)

 

5.改變一個自定義View(UIview)的大小的時候不只會觸發它本身的layoutSubViews ,也會觸發它父UIView(自定義View)的layoutSubviews事件

 

6. UIScrollView

6.1這種狀況也會調用(比較特殊)

// scrollView比較特殊

CustomScrollView *scrollView= [[CustomScrollView alloc]init];

[self.view addSubview:scrollView];

 

6.2這種狀況會調用一次layoutSubviews

// 由於scrollView有size,因此會調用

CustomScrollView *scrollView= [[CustomScrollView  alloc]initWithFrame:CGRectMake(100,100,300,200)];

[self.view addSubview:scrollView];

scrollView.backgroundColor= [UIColor yellowColor];

scrollView.contentSize= CGSizeMake(0,500);

6.3當UIScrollView滑動的時候會掉屢次layoutSubviews

 

7.UIButton的layoutsubviews何時調用

7.1這種狀況下button的layoutSubviews調用一次,由於當控制器的view顯示的時候會調用控制器view的layoutSubviews(UIView除外,比較特殊)

- (void)viewDidLoad{

    [super viewDidLoad];

    CustomBtn*button = [[CustomBtn alloc]init];

    [self.view addSubview:button];

}

 

7.2設置title會調用一次layoutSubviews

CustomBtn*button = [[CustomBtn alloc] init];

[button setTitle:@"xxoo" forState:UIControlStateNormal];

[self.view addSubview:button];

 

7.3設置image的時候會調用一次layoutSubviews,注意:若是圖片的名字在工程裏面沒有,就不會調用.

CustomBtn *button = [[CustomBtn alloc] init];

 [button setImage:[UIImage imageNamed:@"xoxo"] forState:UIControlStateNormal];

 [self.view addSubview:button];

相關文章
相關標籤/搜索