要了解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的一些注意事项的更多相关文章

  1. IOS开发学习笔记038-autolayout 自动布局 界面实现

    在storyboard/xib文件中实现自动布局 autolayout 1.注意事项 autolayout和frame属性是有冲突的,所以如果准备使用autolayout,就不要再代码中对控件的fra ...

  2. 【原】Masonry+UIScrollView的使用注意事项

    [原]Masonry+UIScrollView的使用注意事项 本文转载请注明出处 —— polobymulberry-博客园 1.问题描述 我想实现的使用在一个UIScrollView依次添加三个UI ...

  3. mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项

    mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项 字数400 ...

  4. Masonry使用注意事项

    1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...

  5. 【收藏】Android AutoLayout全新的适配方式, 堪称适配终结者

    来源:http://blog.csdn.net/lmj623565791/article/details/49990941 更多:Android屏幕适配全攻略(最权威的Google官方适配指导) 一. ...

  6. Android AutoLayout全新的适配方式 堪称适配终结者(转)

    一.概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的.个人也比较关注适配的问题,之前也发了几篇 ...

  7. AutoLayout框架Masonry使用心得

    AutoLayout框架Masonry使用心得 字数1769 阅读1481 评论1 喜欢17 我们组分享会上分享了页面布局的一些写法,中途提到了AutoLayout,会后我决定将很久前挖的一个坑给填起 ...

  8. 史上比较用心的纯代码实现 AutoLayout

    入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...

  9. iOS开发中xib和Storyboard中需要注意的事项

    使用xib注意事项: 1.只有自带view的控件才可以使用xib,因为它本身就是一个view 2.在使用可视化控件添加属性(代码)时候,如果删除了属性代码,一定要在xib上解除关联(不然会崩溃) 3. ...

随机推荐

  1. ambari安装过程中的问题汇总

    今天重新安装ambari过程中,遇到了几个问题,耗费了我很长时间,在此记录一下 ambari重新安装可参考我之前的一篇随笔 http://www.cnblogs.com/6tian/p/4097401 ...

  2. algorithm@ Matrix fast power

    一. 什么是快速幂: 快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高.一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次 ...

  3. Sublime Text 教程

    编辑器的选择(Editor Choices) 从初学编程到现在,我用过的编辑器有EditPlus.UltraEdit.Notepad++.Vim.TextMate和Sublime Text,如果让我从 ...

  4. fcntl记录锁实例

    fcntl 函数是一个相当常用的对文件进行加锁操作的函数. 文件锁包括强制锁.建议锁.记录锁, 不过一般系统和内核都是用的强制锁. 以下为记录锁的例子:------------------------ ...

  5. 运用Date日期来做日历

    import java.util.*;import java.text.*;class Two {    public static void main(String[] args)     {   ...

  6. JS自定义事件(Dom3级事件下)

    原文出处:  http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. ...

  7. ios 好去处

    1.王巍的博客(我们都叫它喵神,他很萌哒) 链接:http://onevcat.com/ (难度指数:※※※※※)理由:他的swift的新书讲解的非常好,但不适合入门,进阶的话这是很适合的一本书.其他 ...

  8. UNITY 打包安卓APK

    1,安装JDK.这个直接下就行了. 2,安装android sdk相关.这个比较蛋疼,官网是被墙的.有些网站的包还是需要访问墙外下载的.关键是找对那个能用的包(对我来说就是不FQ). http://p ...

  9. 【python自动化第十篇:】

    复习: 线程与进程的区别: 进程:资源的集合 线程:最小调度单位 进程至少包含一个线程 线程之间的内存是共享的,两个线程操作同一个数据就会修改整个结果(需要mutex加锁来保持数据的一致性),递归锁, ...

  10. iOS开发中懒加载的使用和限制

    1.在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生. 2.下边用代码解释: - (NSMutableArray *)newsArr{ if (!_newsArr ...