1,自动布局是一种基于约束的布局(constraint-based layout)引擎,它可以根据开发者在对象上的约束自动调整大小与位置。

2.在iOS 6之前使用的布局模型是“spring&struts”模型。虽然大部分情况下运行很有效率,但旋转时仍然需要写代码为子视图自定义布局。

3.布局代码在layouSubviews方法中编写。

4.在Xcode 5中使用自动布局时第一个引人注目的变化是Xcode 5不会自动添加约束,除非你明确的要求Xcode添加。

Xcode 5让开发者控制布局,不会自动添加约束。

如果添加的约束不够定义布局,Xcode 5的故事板或者Interface Builder的编译器会生成警告,还会给出修复建议。

在Xcode 5中,如果没有添加任何约束,IDE会自动在运行时添加固定的位置和大小约束。

5.在Xcode 5中使用自动布局

打开故事板,可以看到如下四个按钮:

Align(第一个):用来添加对齐约束。

Pin():添加标准约束,比如相对于其他视图的大小和位置。

Reslove(解决) Auto Layout Issues(情况):可以让Xcode 自动生成约束,或者基于约束把子视图的边框更新到正确的位置。

Resizing Behavior:可以用来设置哪些类会继承这些约束。默认情况下,Siblings and Ancestors(兄弟姐妹和祖先)和Descendants(后代)都是选中状态。但是推荐把Silbings和Ancestors留空。如果选中的话,对齐视图中的子视图会变得很困难,子视图的原点固定,当你设置子视图的大小时,祖先视图会跟着变,这样很烦人。在创建布局时,会用到其他三个菜单按钮。

6.固有尺寸

iOS中大部分控件元素都有固有尺寸。打开尺寸查看面板(size inspector),会发现有些属性(eg:高度和宽度)无法修改。

7.固有尺寸和本地化

UILabel和UIButton的固有尺寸很有意思。固有尺寸反应了其内容,标题越长,标签的固有尺寸越宽,这种特性搭配自动布局能够容易创建可以根据不同语言的内突自动调整尺寸的按钮和标签。

8.设计时和运行时布局

Xcode 5不会自动添加约束。相反,如果添加的约束不能无歧义的描述布局,Xcode 5会显示一系列的警告或者错误,而且会高亮布局中的歧义。

大部分情况下,任何会导致用户界面错误布局的情况都会产生警告,并且运行时崩溃(主要由带歧义的约束造成)会被视为错误。设计时(即设计阶段,相对运行时而言)有问题的控件会用黄色实线框框起来,运行时有问题的控件则用红色虚线框框起来。

黄色框突出了有问题的控件,显示其在设计时的大小和位置,红色框则显示了其在运行时的大小和位置。

不要手动添加缺失的约束,点击第三个菜单按钮,选择“Add Missing Constraints”来让Xcode 自动添加。

9.自动更新边框

当某个视图位置不对时会出现如下所示的警告:

可以点击第三个按钮并选择Update Frames来消除这种警告。

10.顶部和底部布局引导

在iOS 7中,每个视图控制器都有两个属性,叫做topLayoutGuide和bottomLayoutGuide。Xcode 5将其显示为IB文档中的对象。我们可以把视图相对于这两个属性对齐。

11.辅助编辑器中的布局预览

Xcode 5的辅助编辑器也能预览用户界面,可以模拟iOS 6和iOS 7设备,以及横屏及竖屏。只要打开辅助编辑器,点击顶层路径式导航栏菜单的第一个按钮,选择Preview,就能在辅助编辑器面板中看到用户界面预览。预览面板会随着文档的修改而实时更新。

12.在设计时调试自动布局

Xcode 5调试自动布局比以前容易的多,以前只能在各种设备上运行应用然后等着崩溃。Xcode 5允许开发者在设计时可视化的处理这些崩溃。光这一点就是工作流上的巨大改进了。

自动布局有两类主要问题,第一类发生在约束集不足以定义所有可能的屏幕方向/尺寸下的布局时。第二类则是太多约束导致至少在一种屏幕方向下会产生冲突时发生的。

第一类问题大体上可以分为两种,边框歧义和视图摆放错误。当你没有添加约束来无歧义的确定视图在运行时的位置和大小时就会产生边框歧义。视图摆放错误则是边框歧义的副作用。设计时视图的大小和位置可能和运行时的大小和位置不匹配,这是Xcode 会警告视图摆放错误。通常添加必要的约束就能解决这个问题。

顾名思义,约束冲突发生在添加的约束互相之间会产生冲突时,这个时候,自动布局引擎会试图在运行时破坏约束(并且会打印一条消息列出被破坏的约束)并布局,如果失败就会产生运行时崩溃。约束冲突是仅有的无法在设计时发现的布局错误。在部分情况下,约束都是在某种屏幕方向下冲突的,可能你添加的约束在竖屏的情况下工作良好,到了横屏情况下却互相冲突了。

13.在自动布局中使用滚动视图

14.使用自动布局和边框

15.可视格式化语言及其缺点

16.调试布局错误

调试台日志会列出自动布局的约束。


我的CSDN博客地址:http://blog.csdn.net/qw963895582/article

掌握iOS自动布局的更多相关文章

  1. iOS 自动布局详细介绍

    1. 自动布局的理解 iOS自动布局很有用,可以在不同size的屏幕上运行,原先看的头痛,还是习惯用最蠢的[UIScreen mainScreen].bounds.size.width等来布局,后来实 ...

  2. iOS自动布局——Masonry详解

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂新鲜事儿发表于云+社区专栏 作者:oceanlong | 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 ...

  3. IOS自动布局

    参考资料 https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AutolayoutPG/Vi ...

  4. iOS自动布局之autoresizingi

    对于iOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法.而且也还有一些问题,如iPhone5的适配, ...

  5. 学会爱上iOS自动布局(Auto Layout) - 剑尖

    本文翻译自Yari Dareglia的LEARN TO LOVE AUTO LAYOUT文章先生们,女士们,让我们以正确的心态开始本教程吧:自动布局就是简单!我花了一段时间来掌握自动布局是如何工作的, ...

  6. iOS 自动布局过程

    自动布局将视图显示在屏幕上的步骤: 更新约束,它会从子视图传递到父视图,设置布局信息:约束更新时自动触发setNeedsUpdateConstraints:updateConstraints可以增加本 ...

  7. iOS 自动布局框架 – Masonry 详解

    目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了,但是在一些变化比较复杂的页面,还是需要通过代码来进行UI开发的.而且有很多比较老的项目,本身就还在采用纯 ...

  8. iOS自动布局框架-Masonry详解

    首先,在正式使用Masonry之前,我们先来看看在xib中我们是如何使用AutoLayout     从图中我们可以看出,只要设置相应得局限,控制好父视图与子视图之间的关系就应该很ok的拖出你需要的需 ...

  9. IOS 自动布局-UIStackPanel和UIGridPanel(四)

    为什么说scrollview的自动化布局是难点? 对scrollview做自动化布局,无非就是想对scrollview里面的subviews来做自动化布局.但是scrollview里面的subview ...

随机推荐

  1. Jmeter+Jenkins集成html报告显示问题

    在J meter+Jenkins集成生成的html报告时,出现如下问题:无法正常显示表格,detail内容无法折叠和展开操作. 解决方法:执行下列脚本行 在Jenkins :系统管理--脚本命令行 S ...

  2. .Net中Math.Round与四舍五入

    有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入) ...

  3. sql server 根据执行计划查询耗时操作

    with QS as( select cp.objtype as object_type, /*类型*/ db_name(st.dbid) as [database], /*数据库*/ object_ ...

  4. [CF 474E] Pillars (线段树+dp)

    题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...

  5. Grid Infrastructure Single Client Access Name (SCAN) Explained (文档 ID 887522.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.1 and laterExalogic Elastic Cloud ...

  6. 项目积累——SQL积累

    select sum(njts)-sum(ysyts) from njsyqk where ygdh='888882' and ((yxbz is null) or (yxbz='1')) selec ...

  7. onmousemove和onmouseout事件的调用,和js使用双引号、单引号的时候应该注意的问题

    使用js的时候,统一使用双引号,然后通过反斜杠进行转义 ①如果同时使用单引号.和双引号的情况下容易出现问题,导致标签中表示的事件不能调用, ②导致由于标签没有封口而出现样式布局错误 <!DOCT ...

  8. Eclipse is running in a JRE, but a JDK is required 解决方法

    本文非原创,转自http://liguoliang.com/2010/eclipse-is-running-in-a-jre-but-a-jdk-is-required/ 安装Maven后每次启动出现 ...

  9. C语言学习笔记(1):Hello World!

    #include <stdio.h> void main() { printf("Hello World!\n"); } 几乎学习任何语言接触到的第一个语言都是Hell ...

  10. 在UltraEdit的查找和替换中使用正则表达式 (转)

    很多朋友都用过或者正在用UltraEdit,这个编辑器陪伴我也好几年了,从很多地方影响着我写代码的快捷键习惯,Ultraedit提供了非常丰富的编辑功能,其中非常重要的查找和替换功能一定大家都用过,U ...