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];
}
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开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- iOS开发使用JSON解析网络数据
- IOS开发代码分享之获取启动画面图片的string
- iOS开发实现音频播放功能
- iOS开发之视图切换
- iOS开发使用XML解析网络数据
- IOS开发实现录音功能
- iOS开发之UIScrollView详解
- IOS开发之路--C语言数组和字符串
- iOS开发之触摸事件
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发使用GDataXML框架解析网络数据
- iOS开发之UITableView详解
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios推送证书
- iOS和tvOS游戏按需加载资源简介
- ios开发之环境搭建-01
- 在开发iOS程序时对日期处理的总结