- 1.在以下情況都會調用
- 1.直接調用[self setNeedsLayout];(這個在上面蘋果官方文檔里有說明)
- 2.addSubview的時候。
- 3.當view的size發生改變的時候。
- 4.滑動UIScrollView的時候。
- 5.旋轉Screen會觸發父UIView上的layoutSubviews事件。
注意:當view的size的值為0的時候,addSubview也不會調用layoutSubviews。當要給這個view添加子控件的時候不管他的size有沒有值都會調用
- 2.先來看一下UIView的layoutSubviews在什么情況下會調用
- 2.1初始化,當size不為0的時候調用一次,當size為0的時候不會調用(在任何方法里面都不會調用)
SubView*view= [[SubView alloc]initWithFrame:CGRectMake(0,0,100,100)];
view.backgroundColor=[UIColor redColor];
[self.view addSubview:view];
self.sbView= view;
- 2.2當size改變的時候調用一次(size每次都不同,如果size相同就不會調用)
- 2.3當添加子控件的時候,不管子控件有沒有尺寸都會調用例如:
// 添加子控件的時候都會調用
CustomBtn *button = [[CustomBtn alloc] init];
[self.sbView addSubview:button];
- 3.看UIButton什么時候調用
- 3.1這種情況下button的layoutSubviews調用一次,因為當控制器的view顯示的時候會調用控制器view的layoutSubviews(UIView除外,比較特殊)
- (void)viewDidLoad{
[super viewDidLoad];
CustomBtn*button = [[CustomBtn alloc]init];
[self.view addSubview:button];
}
- 如果放在 viewDidAppear button的layoutSubviews就不會調用
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// 因為view這時候已經顯示了,父控件就不會布局了,所以代碼寫在這里最好,受干擾的因素最小
CustomBtn*button = [[CustomBtn alloc]init];
[self.view addSubview:button];
}
- 3.2設置title會調用一次layoutSubviews
CustomBtn*button = [[CustomBtn alloc] init];
[button setTitle:@"xxoo" forState:UIControlStateNormal];
[self.view addSubview:button];
- 3.2設置image的時候會調用一次layoutSubviews,注意:如果圖片的名字在工程里面沒有,就不會調用,別想騙過蘋果
CustomBtn *button = [[CustomBtn alloc] init];
[button setImage:[UIImage imageNamed:@"xoxo"] forState:UIControlStateNormal];
[self.view addSubview:button];
// scrollView比較特殊
CustomScrollView *scrollView= [[CustomScrollView alloc]init];
[self.view addSubview:scrollView];
- 4.2這種情況會調用一次layoutSubviews(代碼放在viewDidAppear,防止干擾)
// 因為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);
- 4.3當UIScrollView滑動的時候會掉多次layoutSubviews
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。