谈一谈苹果原生的布局框架 NSLayoutConstraint 和 VFL
来源:互联网 发布:3d平面设计软件 编辑:程序博客网 时间:2024/05/24 00:41
用多了 Masonry 、Snapkit 等第三方框架,自然体会了其中的方便之处,实际上,苹果本身也有自身的自动布局框架,这次来谈谈 NSLayoutConstraint 和 VFL 两种原生自动布局框架。当然,如果对 Masonry 感兴趣,也可直接点击传送门:浅谈 Masonry 布局框架
实际上,Masonry 就是对系统原生 NSLayoutConstraint 进行封装的第三方自动布局框架。
废话不多说,直接进入正题(采用最新的 swift3.1 讲解)
NSLayoutConstraint
public convenience init(item view1: Any, attribute attr1: NSLayoutAttribute, relatedBy relation: NSLayoutRelation, toItem view2: Any?, attribute attr2: NSLayoutAttribute, multiplier: CGFloat, constant c: CGFloat)
构造函数参数说明:
NSLayoutConstraint(item: 视图, attribute: 约束属性, relatedBy: 约束关系, toItem: 参照视图, attribute: 参照属性, multiplier: 乘积, constant: 约束数值)
如果指定 宽、高 约束,则:
1. 参照视图设置为nil;
2. 参照属性选择 .notAnAttribute 。
NSLayoutConstraint 的布局方式可以简单得总结为一个公式:
view1.attr1 = view2.attr2 * multiplier + constant
下面给出代码实例,具体功能不详细说了,比较容易懂:
addConstraints([NSLayoutConstraint(item: tipLabel, attribute: .centerX, relatedBy: .equal, toItem: iconView, attribute: .centerX, multiplier: 1.0, constant: 0)]) addConstraints([NSLayoutConstraint(item: tipLabel, attribute: .top, relatedBy: .equal, toItem: iconView, attribute: .bottom, multiplier: 1.0, constant: 20)]) addConstraints([NSLayoutConstraint(item: tipLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 236)])
VFL 可视化格式语言
open class func constraints(withVisualFormat format: String, options opts: NSLayoutFormatOptions = [], metrics: [String : Any]?, views: [String : Any]) -> [NSLayoutConstraint]
参数说明:
open class func constraints(withVisualFormat:VLF公式, options :[], metrics: 约束数值 [String:数值], views: 视图字典 [String:子视图]
VFL 可视化格式语言简要说明:
H:水平方向
V:垂直方向
| :边界
[]:包含控件的名称字符串,对应关系在 views 字典中定义
():定义控件的宽/高,可以在 metrics 中指定
注意点:VFL 通常用于连续参照关系,如果遇到居中对齐,通常直接使用参照。
来一段示例代码:
// views:定义VFL中的控件名称和实际名称映射关系 // metrics:定义VFL中()指定的常数映射关系 let viewDict:[String:Any] = ["maskIconView":maskIconView, "registerButton":registerButton] let metrics = ["spacing":-20] addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[maskIconView]-0-|", options: [], metrics: nil, views: viewDict)) addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[maskIconView]-(spacing)-[registerButton]", options: [], metrics: metrics, views: viewDict))
阅读全文
2 0
- 谈一谈苹果原生的布局框架 NSLayoutConstraint 和 VFL
- iOS 布局篇(一)-NSLayoutConstraint的使用和 VFL 语言介绍
- 自动布局:AutoLayout代码实现:NSLayoutConstraint、VFL、Mansony
- AutoLayout NSLayoutConstraint VFL
- Objectiv-C UIKit基础 NSLayoutConstraint的使用(VFL实现)
- NSLayoutConstraint布局
- XZ_Swift之苹果原生自动布局的使用
- 苹果原生框架分享 ----- Social
- swift中NSLayoutConstraint布局的使用
- iOS 10 Auto Layout界面自动布局系列3-使用原生NSLayoutConstraint添加布局约束
- 谈一谈框架的框架——Spring
- 使用苹果原生API进行二维码和条形码的扫描
- 使用苹果原生API进行二维码和条形码的扫描
- iOS编程 界面布局 纯代码 VFL编写和添加
- iOS 自动布局 VFL
- VFL 自动布局
- VFL-自动布局
- 界面布局之VFL
- GNU项目
- 对象的默认原型链
- webpack模块加载介绍
- MFC 多个RadioButton设为一组 vs2013
- nio的实现原理
- 谈一谈苹果原生的布局框架 NSLayoutConstraint 和 VFL
- Retrofit 2.X使用详解之请求头
- 路由器web界面分析(四)---学会追踪标签
- LeetCode题目7. Reverse Integer
- 新闻客户端
- Gradle依赖管理
- 为何数据视觉化越来越火
- 轻松搞定内存对齐
- TLS握手协商流程解析