AutoLayout的一些注意事项
要了解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>
AutoLayout的一些注意事项的更多相关文章
- IOS开发学习笔记038-autolayout 自动布局 界面实现
在storyboard/xib文件中实现自动布局 autolayout 1.注意事项 autolayout和frame属性是有冲突的,所以如果准备使用autolayout,就不要再代码中对控件的fra ...
- 【原】Masonry+UIScrollView的使用注意事项
[原]Masonry+UIScrollView的使用注意事项 本文转载请注明出处 —— polobymulberry-博客园 1.问题描述 我想实现的使用在一个UIScrollView依次添加三个UI ...
- mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项
mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项 字数400 ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- 【收藏】Android AutoLayout全新的适配方式, 堪称适配终结者
来源:http://blog.csdn.net/lmj623565791/article/details/49990941 更多:Android屏幕适配全攻略(最权威的Google官方适配指导) 一. ...
- Android AutoLayout全新的适配方式 堪称适配终结者(转)
一.概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的.个人也比较关注适配的问题,之前也发了几篇 ...
- AutoLayout框架Masonry使用心得
AutoLayout框架Masonry使用心得 字数1769 阅读1481 评论1 喜欢17 我们组分享会上分享了页面布局的一些写法,中途提到了AutoLayout,会后我决定将很久前挖的一个坑给填起 ...
- 史上比较用心的纯代码实现 AutoLayout
入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...
- iOS开发中xib和Storyboard中需要注意的事项
使用xib注意事项: 1.只有自带view的控件才可以使用xib,因为它本身就是一个view 2.在使用可视化控件添加属性(代码)时候,如果删除了属性代码,一定要在xib上解除关联(不然会崩溃) 3. ...
随机推荐
- 【原】Spark Rpc通信源码分析
Spark 1.6+推出了以RPCEnv.RPCEndpoint.RPCEndpointRef为核心的新型架构下的RPC通信方式.其具体实现有Akka和Netty两种方式,Akka是基于Scala的A ...
- C#学习:集合、迭代、泛型(1)
一.System.Collections名称空间下几个接口表征着集合的功能: 1.IEnumerable:表征着迭代功能 public interface IEnumerable { IEnumera ...
- linux find用法总结
前言:我们为什么要学会使用find命令? 转自:http://blog.chinaunix.net/uid-24648486-id-2998767.html 每一种操作系统都有成千上万的文件组成,对于 ...
- Import the Add Email and Post Configuration to the SiteMap managed solution -Dynamices CRM
We have prepared a managed solution named Add Email and Post Configuration to SiteMap that you can i ...
- Oracle数据库字符串连接方法
转至:http://database.51cto.com/art/201011/232267.htm 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLSe ...
- Mysql相关问答
问:我们团队中的一人想要使用 bigint 字段类型来代替 25-30 长度的 varchar 类型来存储 CRC64 数据,然后将索引也改成 bigint 的索引,这会节省索引的空间.请问这否是合理 ...
- SQLite 入门教程(一)基本控制台(终端)命令 (转)
转于: SQLite 入门教程(一)基本控制台(终端)命令 一.基本简介 SQLite 是一个自持的(self-contained).无服务器的.零配置的.事务型的关系型数据库引擎.因为他很小,所 ...
- linux命令之cat
转自:http://www.cnblogs.com/peida/archive/2012/10/30/2746968.html cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容, ...
- "用wow64exts调试64位任务管理器抓取的32位程序的dump"
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:"用wow64exts调试64位任务管理器抓取的32位程序的dump".
- 让ie9之前的版本支持canvas
原来google的研发人员早就帮我们解决了这问题. 在这里我们得首先感谢google 在这链接http://excanvas.sourceforge.net/ 下载下来后 吧excanvas.js引入 ...