iOS中文API之NSLayoutconstraint
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的更多相关文章
- iOS中文API之UITouch详解
UITouch 对象用于位置. 大小. 运动和一根手指在屏幕上为某一特定事件的力度.触摸的力度是从开始在 iOS 9 支持 3D 的触摸的设备上可用.你可以通过UIEvent对象传递给响应者对象访问. ...
- iOS中文API之UIResponder介绍
该UIResponder类定义了响应和处理事件的对象接口.它是UIView和UIApplication的超类(UIWindow).这些类的实例有时被称为响应者对象,简单地说就是响应者. 通常有2种事件 ...
- [置顶] COcos2d-X 中文API
本文来自http://blog.csdn.net/runaying ,引用必须注明出处! COcos2d-X 中文API 温馨提醒:使用二维码扫描软件,就可以在手机上访问我的博客啦!另外大家可以访问另 ...
- [转载]fullPage.js中文api 配置参数~
fullPage.js中文api 配置参数 选项 类型 默认值 说明 verticalCentered 字符串 true 内容是否垂直居中 resize 布尔值 false 字体是否随着窗口缩放而缩放 ...
- android SDK下载及中文API地址
中文API:http://wiki.eoeandroid.com/Android_API_Guides Android Dev Tools官网地址:www.androiddevtools.cn 收集整 ...
- JQUERY MOBILE 中文API站 和 官方论坛
中文API站:http://www.jqmapi.com/api1.2/preview/quickstartquide.html 官方论坛:http://bbs.phonegapcn.com/foru ...
- class-dump获取iOS私有api
转自:http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class-dump 资源地址http ...
- 如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
[编者按]本文作者 Joyce Echessa 是渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.文中作者通过示例介绍用 ios-charts 库创建简易美观的 ...
- 设置Eclipse中文API提示信息
准备工作:下载中文API到本机:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_ ...
随机推荐
- Java NIO之缓冲区Buffer
Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...
- 【BZOJ】1513: [POI2006]Tet-Tetris 3D
题意 给\(n(1 \le n \le 20000)\)个立方体\((x, y, z)\),依次落下.求所有立方体落下完了以后最高的高度. 分析 平面求最大值,平面更新最大值. 题解 二维线段树走起, ...
- Linux之进程管理
==================================================================================================== ...
- PHP面向对象学习七 总结
1.对象描述的配置 方法名 __tostring() 我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容. class My{ function __tostring ( ){ echo & ...
- Sortable Observable Collection in C#
Sorting outside the collection protected override void OnNavigatedTo(NavigationEventArgs e) { if (Se ...
- The Bus Driver Problem
题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=90648#problem/G 题意: 给每位司机分配一个白天和晚上的行车路线, ...
- zepto的tap事件的点透问题的几种解决方案
你可能碰到过在页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹出层后,这个按钮正下方的内容也会执行点击事件(或打开链接).这个被定义为这是一个“点透”现象. 以前,我也听到过tap的点 ...
- hdu杭电1671 / poj3630 字典树
传送门 题意:输入n串数字 找出是否有存在串的前缀与另一个串相同 如果存在 输出NO否则输出YES 思路:用字典树解决 标记字典树总串的结尾 查找出一个串内部是否有被标记的节点 如果有那么说明存在前缀 ...
- jquery实现获取手机验证码倒计时效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java中用过滤器解决字符编码问题
java的web程序经常出现中文乱码的问题,用一个实现了Filter接口的过滤器类可以较好地解决这个问题. 方式一 EncodingFilter import java.io.IOException; ...