您的位置:首页 > 移动开发 > IOS开发

iOS开发:关于layout的一些方法

2016-05-26 16:43 441 查看
一、解析LayoutSubviews

1、 init初始化不会触发layoutSubviews
2、 addSubview会触发layoutSubviews(需要frame不为0)
3、 设置view的Frame会触发layoutSubviews(frame的值设置前后发生了变化)
4、 滚动一个UIScrollView会触发layoutSubviews
5、 旋转Screen会触发父UIView上的layoutSubviews事件
6、 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
7、setNeedsLayout

标记为需要重新布局,不立即刷新,但layoutSubviews一定会被调用。配合layoutIfNeeded立即更新
8、layoutIfNeeded
如果,有需要刷新的标记,立即调用layoutSubviews进行布局
注意:layoutSubviews不会自己调用,添加到父视图时才会调用。
在苹果的官方文档中强调:  
You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.layoutSubviews, 
当我们在某个类的内部调整子视图位置时,需要调用。反过来的意思就是说:如果你想要在外部设置subviews的位置,就不要重写。
二、当view有约束的时候。
//子视图有约束的话 会执行这个方法
- (void)viewDidLayoutSubviews{
//constant 约束值改变相当于setNeedsLayout标记需要更新布局 但不会立马更新
self.widthConstraint.constant = 200;
self.heightConstraint.constant = 50;
[UIView animateWithDuration:2.0 animations:^{
//layoutIfNeeded 是立即更新布局
[self.view layoutIfNeeded];
}];
}


三、sizeThatFit与sizeToFit
- (void)viewDidLoad {
[super viewDidLoad];

TestView * test= [[TestView alloc] initWithFrame:CGRectMake(20, 40, 100, 50)];
test.backgroundColor = [UIColor redColor];

//会调用layoutSubviews方法
[self.view addSubview:test];

test.text = @"我们的大中国";

//会调用sizeThatFits:方法
[test sizeToFit];

}

//以下两个方法需要在类内重写
-(CGSize)sizeThatFits:(CGSize)size{

//返回需要的cgsize
return CGSizeMake(100, 100);
}

-(void)layoutSubviews{

[super layoutSubviews];
//设置子类的frame
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios开发