autolayout的各种坑
2015-06-13 16:50
281 查看
xocde7的autolayout
在viewDidLoad之前, 使用frame改变布局是没有用的, 简单的视图才可以使用autolayout, 稍微复杂写的都要使用代码来编写
获取当前view的宽度不再是使用self.view.frame.size.width, 因为autolayout下获取width是不真实的, 需要[uiscreen mainScreen].bounds.size.width来获取屏幕宽度
[_xibView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.offset(300);
make.width.offset(100);
make.height.offset(100);
}];
例如:
那么在viewDidLoad方法里设置子控制器的view.frame, 你会发现frame会被重置
应该在viewWillAppear:animated 方法里面设置子控制器的view.frame
不然的话你在cell的layoutsubview方法做出的布局更改是没有效果的
记得clean project才有效果哦
你就会发现, 你加入的子控制器根本没有显示出来
(分析: 可能是因为, 如果使用autolayout, 进入viewdidload的时候, view的frame并没有被确定, 子控制器的视图的frame必须依靠父控制器的view的frame)
但是父控制的view的frame这个时候恰好有没有办法确定, 所以出现了这种情况!
在viewDidLoad之前, 使用frame改变布局是没有用的, 简单的视图才可以使用autolayout, 稍微复杂写的都要使用代码来编写
获取当前view的宽度不再是使用self.view.frame.size.width, 因为autolayout下获取width是不真实的, 需要[uiscreen mainScreen].bounds.size.width来获取屏幕宽度
[_xibView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.offset(300);
make.width.offset(100);
make.height.offset(100);
}];
1. autolayout做动画需要调用系统方法
[self.view layoutIfNeeded];例如:
[UIView animateWithDuration:0.5 animations:^{ // CGRect rect = _xibView.frame; // rect.origin.y = 300; // _xibView.frame = rect; // [_xibView mas_updateConstraints:^(MASConstraintMaker *make) { make.top.offset(300); make.width.offset(100); make.height.offset(100); }]; [self.view layoutIfNeeded]; } completion:^(BOOL finished) { }];
2. 没办法知道这个视图的真实尺寸
3. 难以修改或者这个视图的尺寸和位置约束
4. 一个控制器包含多个子控制器
我们需要把子控制器的view加入到当前控制器的view那么在viewDidLoad方法里设置子控制器的view.frame, 你会发现frame会被重置
应该在viewWillAppear:animated 方法里面设置子控制器的view.frame
5. UITableViewCell问题
用惯了autolayout的uitablviewcell, 如果有一天你不使用autolayout, 记得把UITableViewCell的autolayout勾选给去掉,不然的话你在cell的layoutsubview方法做出的布局更改是没有效果的
记得clean project才有效果哦
6.UIViewcontroller嵌套子控制器
一般情况下是没有问题的, 但是加入在viewDidLoad方法里加入子控制器,你就会发现, 你加入的子控制器根本没有显示出来
(分析: 可能是因为, 如果使用autolayout, 进入viewdidload的时候, view的frame并没有被确定, 子控制器的视图的frame必须依靠父控制器的view的frame)
但是父控制的view的frame这个时候恰好有没有办法确定, 所以出现了这种情况!
相关文章推荐
- 搭建无线漫游网络及需要注意的问题
- xUtils框架介绍(二)
- 基于JSP的登陆验证码
- 第十五周项目一:用二进制文件处理学生成绩
- YT03-递推求解课后题目-1003 不容易系列之(3)—— LELE的RPG难题-(6.7日-烟台大学ACM预备队解题报告)
- YT03-递推求解课后题目-1002 超级楼梯-(6.7日-烟台大学ACM预备队解题报告)
- eclipse+CDT调试segmentation fault错误
- oracle建立表空间
- 兵器簿之Alcatraz(插件管理神器)的配置和使用
- DJANGO_SETTINGS_MODULE设置(MacOS, Linux)
- Spring Framework 下载地址
- C#中的类:字段、属性、方法
- 关于几个信号
- 批量插入数据 C# SqlBulkCopy使用
- vi编辑器的使用
- 批量插入数据 C# SqlBulkCopy使用
- syslog(),closelog()与openlog()--日志操作函数
- YT03-递推求解课后题目-1001 母牛的故事-(6.7日-烟台大学ACM预备队解题报告)
- 堆和栈的区别
- crontab命令简介