上篇文章给大家介绍了AutoLayout 的由来及OC中关于AutoLayout 的类。这篇文章将向大家介绍,在iOS 编程中怎样使用Auto Layout 构建布局约束。

创建布局约束

创建布局约束的方式

iOS 中使用Auto Layout构建布局约束的方式有三种:

  • 用IB设计界面。IB能够生成帮助开发人员高速布局你的约束,你能够在可视化编辑器中定制你的约束集合
  • 为每个视图提供一个约束,来构建NSLayoutConstraint类的实例对象
  • 使用可视化格式语言(VFL)描写叙述约束,进行UI布局

    对于以上三种创建布局约束的方式,作者在开发中经经常使用到是VFL

创建布局约束的规则

不管是哪有一种方式创建布局约束。读者都应该明确哪些视图之间是能够创建约束的。

当约束引用两个视图的时候,这两个视图一定要属于同一视图层次结构。即:

  1. 一个视图是另外一个视图的父视图
  2. 两个视图是必须是兄弟视图

在Interface Builder上使用AutoLayout布局

对于厌烦手动编写代码的程序猿来讲,在IB中使用来AutoLayout布局,无疑是喜闻乐见的。

其实。对于在IB中使用来AutoLayout布局效率也是极高,可是前提你要知道IB上的元素以及IB为开发人员提供的组件。

鉴于在IB中使用来AutoLayout布局。无法用文字描写叙述。作者非常贴心的为各位读者录制了教学视频。大家能够观看。

点击进入

VFL

对于为每个视图提供一个约束。来构建NSLayoutConstraint类的实例对象,因而进行AutoLayout 布局的这种方式,无疑会让咱们代码会非常长非常长,这种方式在实际开发中并不适用。苹果官方的建议,相较于基于代码的方案,优先使用IB。其次使用VFL,最后考虑构建NSLayoutConstraint类的实例对象来为每个视图构建约束。

那么什么是VFL

VFL介绍

可视化格式语言有一个描写叙述视图布局的文本字符串组成。

开发人员仅仅须要依据UI中视图出现的顺序依次列出它们,中间加上对应的符号。这些符号指定了视图间的间隔、不等量和优先级。其实。可视化格式语言将我们的UI设计界面形象地表现为一个简短的字符串。

以下我们来看一个代码演示样例:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[view1]-20-[view2(==width)]" options:0 metrics:@{@"width":[NSNumber numberWithFloat:44]} views:NSDictionaryOfVariableBindings(view1,view2)];

上面一段代码就是向大家介绍怎样使用VFL 构建约束。

当中H:[view1]-20-[view2(==width)] 就是VFL。那么问题来了,这段火星文究竟是什么意思呢?其实意思非常easy:在水平方向。即x轴方向,view1view2的间隔20个像素点,且view2的宽度等于width,当中width为44。

VFL语法结构

(<orientation>:)?(<superView><connection>)?<view>(<connection><view>)*(<connection><superView>)?

?

代表可选项

*代表该项会出现0次或者多次

从上面的语法结构定义来看,三个字:看不懂!然而其实写起来灰常简单。

  1. 方向orientation:VFL的開始是从一个可选方向開始的,能够是H:,代表水平方向;也能够是V:,代表垂直方向。

    如这种一个语法格式:H:[view1]-30-[view2],表示在水平方向上,view1的右边距离view2的左边30个像素。又如这种一个语法格式:V:[view1]-30-[view2],表示在垂直方向上,view1的下边距离view2的上边30个像素。假设不写H:或者V:,那么系统会默觉得H:,可是作者并不建议这样做。

  2. 视图名称:视图的名称被一对方括号包围。如:[view1]。当然view1不是随便取的。它须要和你控件对象的变量名要一样。

  3. 链接符:-

解释到这里大家对VFL语法依旧不是非常懂。那么以下就列一个表格系统给大家解释.

类型 格式 演示样例
方向 H: V: H:表示水平方向 V:表示垂直方向
视图 [item] [view1]
父视图 | H:|-30-[view1]-30-| 表示view1的前后距离父视图的间距都为30
关系 == <= >= H:[view1]-(>=20)-[view2] 表示view2的前面距离view1的后面至少20个像素
固定的宽度 [item(width)] H:[view1(44)]
固定的高度 [item(height)] V:[view1(44)]
最大或最小宽度/高度 [item(<=size)] [item(>=size)] H:[view1(>=44)] V:[view1(>=44)]
与还有一个视图匹配宽度或高度 [item1(==item2)] [item1(>=item2)] [item1(<=item2)] H:[view1(==view2)]表示view1和view2的宽度相等 V:[view1(==view2)]表示view1和View2的高度相等
优先级(0-100) @value H:[view1(<=50@20)] 表示view1的宽度不大于50像素。优先级为20

希望童鞋将这些语法点记在心里,后面将为大家解说几个演示样例,来告诉大家怎样使用VFL。敬请期待下篇博客!

Auto Layout之创建布局约束的更多相关文章

  1. (iOS)使用auto layout进行复杂布局时,UILabel的相关trick

    本文转载至 http://blog.csdn.net/madongchunqiu/article/details/47960745  本文首发于CSDN:http://blog.csdn.net/ma ...

  2. 从 Auto Layout 的布局算法谈性能

    这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...

  3. Auto Layout 使用心得

    此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考我的 Auto Layout 设置哦,下载到本地打开就可以了. 简介 Auto ...

  4. 【转】Auto Layout 进阶

    原文:http://blog.csdn.net/ysy441088327/article/details/12558097   引言: Auto Layout是iOS6发布后引入的一个全新的布局特性, ...

  5. Auto Layout简单应用——以编码的方式实现Auto Layout自动布局(二)

    在上一篇文章iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)中我们简单的介绍了使用Visual Format Language创建布局约束来实现自动布局,这种方法创建的布局约 ...

  6. Beginning Auto Layout Tutorial in iOS 7: Part 6

    Gallery example 屏幕有四个分开的相同的矩形,每个矩形有一个label和一个image view.创建一个Gallery的项目.在Main.storyboard中,拖拉一个view大小为 ...

  7. iOS 开发实践之 Auto Layout

    原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...

  8. ios8来了,屏幕更大,准备好使用 iOS Auto Layout了吗?

    引言: Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 要完全掌握Au ...

  9. [Android开发学iOS系列] Auto Layout

    [Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...

随机推荐

  1. SOAP很2的问题

    小弟说实话不很懂这方面的东西,但上头要求比较一下这两种方式的优劣,欢迎大家赐教啊!“按照一定的网络传输协议,通过符合 FTP/TCP/IP等协议的数据报或者以SOAP的方式传送到接口服务器.”这是出处 ...

  2. iOS isa 浅析

    看见一到面试题讲述一下Objective-C中的isa?完全没听说过,打算小研究一下. 参考:http://blog.sina.com.cn/s/blog_7a2ffd5c01010nme.html ...

  3. 安装php5.4.10时, 错误:‘gdIOCtx’ 没有名为 ‘data’ 的成员

    安装php5.4.10时, 错误:‘gdIOCtx’ 没有名为 ‘data’ 的成员 在安装php时,报如下错误 In file included from /kk/php-5.4.0/ext/gd/ ...

  4. MathType requires a newer version of MT Extra等MathType问题的不兼容性解决方案

    常见问题解决方法: 1.MathType 6.0与office 2007兼容问题 由于Office软件安装时默认是不安装公式编辑器的,在安装完MathType 6.0之后,需要将\MathType 6 ...

  5. 解读TDD的五大误区

    所谓TDD简单地说就是以下两个步骤:确保所有的需求都能被照顾到:在代码不断增加和重构的过程中,可以检查所有的功能是否正确.本文我们一起来看下关于TDD的五大误区. TDD(全称Test Driven ...

  6. XCTest(二)

    New tool sets are making it easier and easier to engage in genuine agile development on iOS. In part ...

  7. quartz Cron-Expression的表达式

    关于quartz Cron-Expression的表达式,这个博客写的很好 ttp://www.cnblogs.com/yaowen/p/3779284.html CronTrigger配置完整格式为 ...

  8. 129 - Krypton Factor

    /*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...

  9. Cannot assign requested address 问题

    測试一个简单的TCP套接字程序,client向server请求建立连接然后释放. 在一台主机上同一时候执行两个client时.出现报错"Cannot assign requestedaddr ...

  10. 为什么输入shutdown -h -t会报错:command not fount

    如果是直接用普通用户($)的身份进行输入[user@localhost ~]$ shutdown -h -t 是不能执行,因为普通用户没有关闭机器的权限. 然而直接使用[user@localhost ...