AutoLayout的一些注意事项
2024-09-24 23:14:22
要了解autolayout 首先要知道程序视图启动顺序:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"1");
} -(void)updateViewConstraints
{
[super updateViewConstraints];
NSLog(@"2");
} -(void)viewDidLayoutSubviews
{
//调用不止一次 跟子视图的数量有关
[super viewDidLayoutSubviews];
NSLog(@"3");
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"4");
}updateViewConstraints方法中进行视图上布局计算,得出各个控件的frame.但是此时并没有将这些frame赋值给各个控件。在viewDidLayoutSubviews方法中,各个控件的frame赋值已经完成,但是并不是在这个方法中赋值的。
如果我们要代码添加控件和约束,别忘了先去除控件的autoresizing ,否则会报出警告,因为二者会存在约束冲突。translatesAutoresizingMaskIntoConstraints=NO 代码添加控件还应注意,控件的创建和添加应在updateViewConstraints 方法之前。否则 每次添加控件都会触发updateViewConstraints方法,导致界面会抖动,以及出现不期望的结果。当我们使用自动布局时还应注意,控件分为两种,一种是固定宽高的,另一种是不固定的依靠自身内容决定宽高的。比如 开关控件就是个固定大小的,它的大小就是那么大,不会改变。对于这种控件,我们只需要设定它的左边和上边的位置就可以了,设置好之后,这个控件还可以作为其他控件的约束参照。但是比如label 这样根据内容决定宽高的控件,虽然在有内容时候,它也可以只设置左边和上边的距离,但是它不能作为其他控件的参照了,除非锁定了它的宽高。比如 我们设定label ,距离左边父控件 20 ,距离上边父控件20.那么假如我们有另一个控件(假定为button)我们不可以设定button 距离左边这个label 20。<span style="font-family: Arial, Helvetica, sans-serif;">自动布局中大多数控件都是好设定的,但是比较难搞的时scrollview 。因为它是靠自身内容的大小来决定它的大小的。比如,我们设定了scrollview 距离左上下右的距离都是20 ,那么它会提示警告。解决的办法之一就是在scrollView内部再添加一个容器view,将这个view设定为与scrollview 完全贴近。然后将这个view的大小改为我们所需要的contentView的大小。最后再这个view中添加控件即可实现滚动。</span>
总体来说自动布局很好地解决了屏幕适配 ,尤其是横竖屏切换的问题。大大简化了我们的计算代码,但是我们又有多少应用是同时支持横竖屏的呢?而且自动布局使我们界面的动画及控件的动态创建都收到了极大的影响,尽管这些影响都能解决,但是还是不如计算frame方便。而且自动布局尽管引入了vfl 语言简化代码,但是约束设置错误的话真的是很难查,如果我们需要使用动画的话,需要将约束设置为属性。设置成属性的话,不如计算frame方便。如果你数学不是很差的话,建议你还是使用计算frame 来布局吧</span>
最新文章
- Nginx - 配置
- IDEA内存溢出问题:
- MyBatis学习总结_06_调用存储过程
- Java调优之jvm和线程的内存分析
- PHP字符串操作常用函数
- android应用版本更新功能---完整版
- 【Android Studio】No JVM installation found
- android dom方式创建xml
- SQL Server 基础 01 数据库、表操作
- 使用MyBatis对数据库中表实现CRUD操作(二)
- C++PrimerPlus第6版 第四章——复合类型
- MySQL优化特定类型的查询
- python3之redis
- 20172302 《Java软件结构与数据结构》第七周学习总结
- uva 10154 - Weights and Measures【dp】qi
- MongoVUE的Collections数据不显示的解决方法
- 2018.10.16 NOIP模拟 华莱士(并查集)
- Java动态代理探讨
- IDEA里点击Build,再Build Artifacts没反应,灰色的?解决办法(图文详解)
- mongodump 失败且导致mongo服务挂掉【本质原因,wt文件损坏】
热门文章
- Linux中的模式转换
- javaweb css教程
- linux驱动程序之电源管理之linux的电源管理架构(3)
- 解读(GoogLeNet)Going deeper with convolutions
- html5 做游戏 Quintus Sublime Text牛逼的神器
- 【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)
- mongdb高级操作(group by )
- Windows Azure功能更新: SDK 2.1发布,Traffic Manager集成
- android 中view的绘制过程
- 理解C# Attribute