AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法。以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸。使用AutoLayout的话,就变为了使用约束条件来定义view的位置和尺寸。这样的最大好处是一举解决了不同分辨率和屏幕尺寸下view的适配问题,另外也简化了旋转时view的位置的定义,原来在底部之上10像素居中的view,不论在旋转屏幕或是更换设备(iPad或者iPhone5或者以后可能出现的mini iPad)的时候,始终还在底部之上10像素居中的位置,不会发生变化。

  约束定义了两个用户借口之间的关系,通过创建约束来满足我们的要求(可见控件在布局系统中的位置和尺寸)。每个约束是一个线性方程,具有以下格式:

  item1.attribute1 = multiplier × item2.attribute2 + constant

  在这个方程式中,attribute1 和 attribute2 是自动布局可以调整时解决这些制约因素的变量。当你创建约束定义其他值。例如,如果您定义两个按钮的相对位置,第二个按钮的起始位置距离第一个按钮结束位置后8像素点。这种关系为线性方程如下所示:      

  button2.leading = 1.0 × button1.trailing + 8.0

  另外。约束并不局限于平等关系。它们还可以使用大于或等于 (> =) 或小于或等于 (< =) 来描述这两个属性之间的关系。约束还具有 1 到 1000 之间的优先级。具有优先级 1000 的约束是必需的。小于 1,000 的所有优先级是可选的。默认情况下,所有约束都是需要 (优先级 = 1,000)。在解决所要的约束后,AutoLayout将从最高到最低的优先级顺序来处理所有可选约束,如果它不能解决一个可选的约束,它将尝试来作为尽可能接近所需的结果,然后移动到下一个约束。这种不平等、 平等和优先级的结合给你强大的灵活性。通过结合多个约束,您可以定义动态地适应用户界面元素在屏幕中的大小和位置。

  创建约束

  + (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views

  通过VFL描述创建约束

参数:

format

约束的格式规范.

opts

选项描述多有对象的属性和布局的方向

metrics

在可视格式字符串中出现的约束dictionary,dictionary的key必须是NSString值,dictionary的value必须是NSNumber类型。

views

视图dictionary,dictionary的key必须是NSString值,dictionary的value必须是UIView对象。

返回值:

  约束的数组

  

  +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c

   通过定义给定视图的指定属性之间的关系创建约束

参数:

view1

约束左侧的视图

attr1

约束左侧视图的属性

relation

约束左侧和右侧视图的关系

view2

约束右侧的视图

attr2

约束右侧视图的属性

multiplier

乘数

c

常量值

  激活或停用约束

  property (getter=isActive) BOOL active

  获取一个约束的状态。默认为NO。

  

  + (void)activateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

  激活指定约束数组中的所有约束。

  + (void)deactivateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

  停用指定约束数组中的所有约束。

  访问约束数据

  

  @property UILayoutPriority priority

  优先级属性。如果一个约束的优先级小于UILayoutPriorityRequired,那么这个约束是可选的。先满足高优先级的约束再可满足低优先级的约束。优先级必须是大于0且小于或等于NSLayoutPriorityRequired。

  @property(readonly, assign) id firstItem

  参与约束的第一个对象。

  @property (readonly) NSLayoutAttribute firstAttribute

  第一个对象的属性。

  @property (readonly) NSLayoutRelation relation

  约束中,2个属性的关系。

  @property (nullable, readonly, assign) id secondItem

  参数约束的第二个对象。

  @property (readonly) NSLayoutAttribute secondAttribute;

  第二个对象的属性

  枚举,常量

  NSLayoutAttribute

  对象的可视化表示形式,用于获取该约束的值的一部分。

下篇介绍使用方法,本文结束

  

iOS中文API之NSLayoutconstraint的更多相关文章

  1. iOS中文API之UITouch详解

    UITouch 对象用于位置. 大小. 运动和一根手指在屏幕上为某一特定事件的力度.触摸的力度是从开始在 iOS 9 支持 3D 的触摸的设备上可用.你可以通过UIEvent对象传递给响应者对象访问. ...

  2. iOS中文API之UIResponder介绍

    该UIResponder类定义了响应和处理事件的对象接口.它是UIView和UIApplication的超类(UIWindow).这些类的实例有时被称为响应者对象,简单地说就是响应者. 通常有2种事件 ...

  3. [置顶] COcos2d-X 中文API

    本文来自http://blog.csdn.net/runaying ,引用必须注明出处! COcos2d-X 中文API 温馨提醒:使用二维码扫描软件,就可以在手机上访问我的博客啦!另外大家可以访问另 ...

  4. [转载]fullPage.js中文api 配置参数~

    fullPage.js中文api 配置参数 选项 类型 默认值 说明 verticalCentered 字符串 true 内容是否垂直居中 resize 布尔值 false 字体是否随着窗口缩放而缩放 ...

  5. android SDK下载及中文API地址

    中文API:http://wiki.eoeandroid.com/Android_API_Guides Android Dev Tools官网地址:www.androiddevtools.cn 收集整 ...

  6. JQUERY MOBILE 中文API站 和 官方论坛

    中文API站:http://www.jqmapi.com/api1.2/preview/quickstartquide.html 官方论坛:http://bbs.phonegapcn.com/foru ...

  7. class-dump获取iOS私有api

    转自:http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class-dump 资源地址http ...

  8. 如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?

    [编者按]本文作者 Joyce Echessa 是渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.文中作者通过示例介绍用 ios-charts 库创建简易美观的 ...

  9. 设置Eclipse中文API提示信息

    准备工作:下载中文API到本机:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_ ...

随机推荐

  1. Windows7下安装MongoDB

    1.下载地址:http://www.mongodb.org/downloads(32位还是64位自行选择).我下载的是:mongodb-win32-x86_64-2.4.5.zip 2.解压把mong ...

  2. Motion images compression and restoration based on computer vision

    This technique should apply to both normal video (consequtive sequences of pictures of real world) a ...

  3. 【BZOJ】3211: 花神游历各国

    题意 \(n\)个点,第\(i\)个点值为\(a_i\).\(m\)个询问,每次询问\([l, r]\)内的和或者将\([l, r]\)的每个值改为自己的算术平方根.(\(n \le 100000, ...

  4. HDU 4738 Caocao's Bridges(Tarjan)

    题目链接 #include <iostream> #include <cstring> #include <cstdio> #include <queue&g ...

  5. HDU 4722 Good Numbers(DP)

    题目链接 脑子有点乱,有的地方写错了,尚大婶鄙视了... 来个模版的. #include <iostream> #include <cstdio> #include <c ...

  6. 通过Ajax post Json类型的数据到Controller

    View function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData&quo ...

  7. css sprites介绍

    一.CSS Sprites简介 通常被意译为“CSS图像拼合”或“CSS贴图定位”.CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟,CSS Sprites并不是什么金科玉 ...

  8. 多态(Java)

    一.多态 1.什么是多态? 解析:不同的对象对于同一个操作,做出的响应不同 具有表现多种形态的能力的特征 2.使用多态的优点 解析:为了实现统一调用 一个小例子:<父类类型作为参数> 父类 ...

  9. 输出单向链表中倒数第k个结点

    描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int       m_nKey; ListNode* ...

  10. 关于svn的使用

    svn听课笔记 1. 下载并安装svn2. 将svn安装目录中bin目录添加到用户path变量中.3. 创建svn根目录svnroot4. 启动svn服务 在dos启动命令: svnserve -d ...