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];