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_ ...
随机推荐
- 栈式自动编码器(Stacked AutoEncoder)
起源:自动编码器 单自动编码器,充其量也就是个强化补丁版PCA,只用一次好不过瘾. 于是Bengio等人在2007年的 Greedy Layer-Wise Training of Deep Netw ...
- html5 摇一摇事件监听
先来看下html5的这几个特性: 1.deviceOrientation:方向传感器数据的事件,通过监听该事件可以获取手机静态状态下的方向数据: 2.deviceMotion: 运动传感器数据事件,通 ...
- 【BZOJ】3434: [Wc2014]时空穿梭
http://www.lydsy.com/JudgeOnline/problem.php?id=3434 题意:n维坐标中要找c个点使得c个点在一条线上且每一维的坐标单调递增且不能超过每一维限定的值m ...
- How to create a project with Oracle Policy Modeling
This blog is about how to create a project with Oracle Policy Modeling. You can do it successfully i ...
- GUI之绘画控制
一.绘制的动力 GUI的绘画是根据消息动作驱动的 主循环应该是 二.绘制的过程 绘画过程应该是这样的: 首先窗口存在上下层关系-> 在绘制时应该从底部窗口开始绘制,逐一绘制 下面是一些特殊的窗口 ...
- SQLSERVER远程备份、恢复(转)
SQLSERVER服务实例名称:192.168.0.2需要备份的数据库名称: a备份机器名称(Client端):192.168.0.3备份机用户:zf 密码:123备份机域名:domain备份机提供备 ...
- .NET设计模式: 工厂模式
.NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html .NET设计模式(1): ...
- Ajax注册验证js代码
分享jquery网站:http://www.css88.com/jqapi-1.9/focusout/ $(document).ready(function() { var bool_user = f ...
- 可能碰到的iOS笔试面试题(4)--C语言
可能碰到的iOS笔试面试题(4)--C语言 可能碰到的iOS笔试面试题(4)--C语言 C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的 ...
- 存储过程: 存储过程(stored procedure)有时也称为sproc。存储过程存储于数据库中而不是在单独的文件中,有输入参数、输出参数以及返回值等。
存储过程示例一: 执行存储过程方法一: 执行存储过程方法二: 存储过程可以定义返回值: 修改存储过程: 利用存储过程查找三个表内的信息: 练习: 超市管理系统:表一:门店仓库表 MenDian ...