swift之自动布局,系统自带的布局、SnapKit布局
2018-02-06 15:18
976 查看
=============SnapKit使用
自动布局核心公式
view.attr1 = view2.attr2 * multiplier + constant
自动布局构造函数
NSLayoutConstraint(item: 视图,
attribute: 约束属性,
relatedBy: 约束关系,
toItem: 参照视图,
attribute: 参照属性,
multiplier: 乘积,
constant: 约束数值)
如果指定宽高的约束, 参数值图设置为nil, 参照属性选择.notAnAttribute
SnapKit的使用方法
通过 snp.makeConstraints 方法给view添加约束,约束有几种,分别是边距,宽,高,左上右下距离,基准线。同时,添加过约束后可以有修正,修正有位移修正(inset、offset)和倍率修正(multipliedBy)
语法一般是: make.equalTo 或 make.greaterThanOrEqualTo 或 make.lessThanOrEqualTo + 倍数和位移修正。
.equalTo:等于
.lessThanOrEqualTo:小于等于
.greaterThanOrEqualTo:大于等于
注意: 使用 snp.makeConstraints 方法的元素必须事先添加到父元素的中,例如:self.view.addSubview(view)
5,约束条件参数支持如下三种类型:
(1)视图属性(ViewAttribute)
视图属性(ViewAttribute) 布局属性(NSLayoutAttribute)
view.snp.left NSLayoutAttribute.Left
view.snp.right NSLayoutAttribute.Right
view.snp.top NSLayoutAttribute.Top
view.snp.bottom NSLayoutAttribute.Bottom
view.snp.leading NSLayoutAttribute.Leading
view.snp.trailing NSLayoutAttribute.Trailing
view.snp.width NSLayoutAttribute.Width
view.snp.height NSLayoutAttribute.Height
view.snp.centerX NSLayoutAttribute.CenterX
view.snp.centerY NSLayoutAttribute.CenterY
view.snp.baseline NSLayoutAttribute.Baseline
import SnapKit
imageV.snp.makeConstraints { (make)
in
make.top.equalTo(self).offset(10)//如果这样简写make.top.equalTo(10),就是默认相对于自己的父view,也可以写成这样make.top.equalToSuperview().offset(10)
make.left.equalTo(self).offset(0)
make.width.height.equalTo(50)
}
lab.snp.makeConstraints { (make)
in
make.edges.equalTo(self)// edges(边缘)
make.size.greaterThanOrEqualTo(imageV)//size(尺寸),当前视图宽高
>= imageV
make.center.equalTo(self)//center(中心),当前视图与self的中新相同
make.edges.equalTo(self).inset(UIEdgeInsetsMake(10,
15,
20, 25))//内位移修正:inset,它距离父视图上、左、下、右边距分别是10、15、20、25
make.size.equalTo(imageV).offset(-50)//外位移修正:offset
,与imageV相比(size)视图宽度、高度均减50
make.size.equalTo(self).multipliedBy(0.5)
//倍率修正:multipliedBy ,视图的尺寸设置self视图的一半大小。
make.top.equalTo(self.snp.top)//当前视图与self的顶部齐平
make.left.greaterThanOrEqualTo(imageV)//这个其实等价于:make.left.greaterThanOrEqualTo(imageV.snp.left)
make.centerX.lessThanOrEqualTo(self.snp.left)//使当前视图对象的中心x坐标小于等于视图self的左边的x坐标
}
======================系统自动布局的使用
/* 约束的设置,控件内部约束由自己添加,比如宽高,如果是与其他的
控件约束那么有父控件添加
*创建约束 NSLayoutConstraint 参数 说明:
* item 自己
* attribute
* relatedBy 大于等于 小于等于 等于
* toItem 另外一个控件
* attribute 另一个控件的熟悉
* multiplier 乘以多少
* constant : 加上多少
* NSLayoutConstraint : 某个控件的属性值 等于 另外一个控件的属性值
乘以多少 加上多少
* 添加约束 addConstraint
*/
//注意事项1:设置translatesAutoresizingMaskIntoConstraints为NO;
view0.translatesAutoresizingMaskIntoConstraints =NO;
//注意事项2:两个view在同一个hierarchy中才有可能添加相关约束。
//注意事项3:当firstAttribute不为宽或者高时,multipler不能为0。
//注意事项4:同上,当firstAttribute不为宽或者高时,secondItem不能为nil。
//当两个Attribute全是宽或高时multiplier才可以为0;(错误提示:
A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes
must be specified in pairs'
乘数(0)或零第二项与位置的第一个属性创建一个非法约束位置等于一个常数。
)
//当secondItem为nil时,secondAttribute应为NSLayoutAttribute.notAnAttribute
使用:
imageV.isUserInteractionEnabled=true
imageV.translatesAutoresizingMaskIntoConstraints=false//
关闭autoresizing 不关闭否则程序崩溃
//设置imageV的左边约束
let left:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.left, relatedBy:NSLayoutRelation.equal, toItem:self, attribute:
NSLayoutAttribute.left, multiplier:1, constant:10)
imageV.superview?.addConstraint(left)//自身的约束要添加到父控件上
let top:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.top, relatedBy:NSLayoutRelation.equal, toItem:self, attribute:
NSLayoutAttribute.top, multiplier:1, constant:10)
imageV.superview?.addConstraint(top)//自身的约束要添加到父控件上
let wid:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.width, relatedBy:NSLayoutRelation.equal, toItem:nil, attribute:
NSLayoutAttribute.notAnAttribute, multiplier:1, constant:50)
imageV.addConstraint(wid)//宽度的约束可以添加到自己身上
let heig:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.height, relatedBy:NSLayoutRelation.equal, toItem:nil, attribute:
NSLayoutAttribute.notAnAttribute, multiplier:1, constant:50)
imageV.addConstraint(heig)//高度的约束可以添加到自己的身上
===========VFL布局
自动布局类函数
NSLayoutConstraint.constraints(
withVisualFormat: VLF公式
options: [],
metrics: 约束数值字典[Strong : 数值],
views: 视图字典[String : 子视图])
VLF 可视化格式语言
H : 水平方向
V : 垂直方向
| 边界
[] 包含空间的名称字符串, 对应关系在views字典中定义
() 定义空间的宽/高, 可以再metrics中指定, 具体是宽还是高, 看布局方向
示例代码
// metrics: 定义 VFL 中 () 指定的参数映射关系
// views: 定义VFL 中的控件名称和实际名称的映射关系
let viewDic = ["maskIconView" : maskIconView,
"registerButton" : registerButton
] as [String :
Any]
let metrics = ["spacing" :
-35]
// 设置约束: 左边界 - 零间距 - 视图maskIconView - 零间距 - 右边界
addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "H:|-0-[maskIconView]-0-|",
options: [],
metrics: nil,
views: viewDic))
// 设置约束: 上边界 - 零间距 - 视图maskIconView(高100) - (间距-35) - 视图registerButton - 右边界
addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "V:|-0-[maskIconView(100)]-(spacing)-[registerButton]-|",
options: [],
metrics: metrics,
views: viewDic))
自动布局核心公式
view.attr1 = view2.attr2 * multiplier + constant
自动布局构造函数
NSLayoutConstraint(item: 视图,
attribute: 约束属性,
relatedBy: 约束关系,
toItem: 参照视图,
attribute: 参照属性,
multiplier: 乘积,
constant: 约束数值)
如果指定宽高的约束, 参数值图设置为nil, 参照属性选择.notAnAttribute
SnapKit的使用方法
通过 snp.makeConstraints 方法给view添加约束,约束有几种,分别是边距,宽,高,左上右下距离,基准线。同时,添加过约束后可以有修正,修正有位移修正(inset、offset)和倍率修正(multipliedBy)
语法一般是: make.equalTo 或 make.greaterThanOrEqualTo 或 make.lessThanOrEqualTo + 倍数和位移修正。
.equalTo:等于
.lessThanOrEqualTo:小于等于
.greaterThanOrEqualTo:大于等于
注意: 使用 snp.makeConstraints 方法的元素必须事先添加到父元素的中,例如:self.view.addSubview(view)
5,约束条件参数支持如下三种类型:
(1)视图属性(ViewAttribute)
视图属性(ViewAttribute) 布局属性(NSLayoutAttribute)
view.snp.left NSLayoutAttribute.Left
view.snp.right NSLayoutAttribute.Right
view.snp.top NSLayoutAttribute.Top
view.snp.bottom NSLayoutAttribute.Bottom
view.snp.leading NSLayoutAttribute.Leading
view.snp.trailing NSLayoutAttribute.Trailing
view.snp.width NSLayoutAttribute.Width
view.snp.height NSLayoutAttribute.Height
view.snp.centerX NSLayoutAttribute.CenterX
view.snp.centerY NSLayoutAttribute.CenterY
view.snp.baseline NSLayoutAttribute.Baseline
import SnapKit
imageV.snp.makeConstraints { (make)
in
make.top.equalTo(self).offset(10)//如果这样简写make.top.equalTo(10),就是默认相对于自己的父view,也可以写成这样make.top.equalToSuperview().offset(10)
make.left.equalTo(self).offset(0)
make.width.height.equalTo(50)
}
lab.snp.makeConstraints { (make)
in
make.edges.equalTo(self)// edges(边缘)
make.size.greaterThanOrEqualTo(imageV)//size(尺寸),当前视图宽高
>= imageV
make.center.equalTo(self)//center(中心),当前视图与self的中新相同
make.edges.equalTo(self).inset(UIEdgeInsetsMake(10,
15,
20, 25))//内位移修正:inset,它距离父视图上、左、下、右边距分别是10、15、20、25
make.size.equalTo(imageV).offset(-50)//外位移修正:offset
,与imageV相比(size)视图宽度、高度均减50
make.size.equalTo(self).multipliedBy(0.5)
//倍率修正:multipliedBy ,视图的尺寸设置self视图的一半大小。
make.top.equalTo(self.snp.top)//当前视图与self的顶部齐平
make.left.greaterThanOrEqualTo(imageV)//这个其实等价于:make.left.greaterThanOrEqualTo(imageV.snp.left)
make.centerX.lessThanOrEqualTo(self.snp.left)//使当前视图对象的中心x坐标小于等于视图self的左边的x坐标
}
======================系统自动布局的使用
/* 约束的设置,控件内部约束由自己添加,比如宽高,如果是与其他的
控件约束那么有父控件添加
*创建约束 NSLayoutConstraint 参数 说明:
* item 自己
* attribute
* relatedBy 大于等于 小于等于 等于
* toItem 另外一个控件
* attribute 另一个控件的熟悉
* multiplier 乘以多少
* constant : 加上多少
* NSLayoutConstraint : 某个控件的属性值 等于 另外一个控件的属性值
乘以多少 加上多少
* 添加约束 addConstraint
*/
//注意事项1:设置translatesAutoresizingMaskIntoConstraints为NO;
view0.translatesAutoresizingMaskIntoConstraints =NO;
//注意事项2:两个view在同一个hierarchy中才有可能添加相关约束。
//注意事项3:当firstAttribute不为宽或者高时,multipler不能为0。
//注意事项4:同上,当firstAttribute不为宽或者高时,secondItem不能为nil。
//当两个Attribute全是宽或高时multiplier才可以为0;(错误提示:
A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes
must be specified in pairs'
乘数(0)或零第二项与位置的第一个属性创建一个非法约束位置等于一个常数。
)
//当secondItem为nil时,secondAttribute应为NSLayoutAttribute.notAnAttribute
使用:
imageV.isUserInteractionEnabled=true
imageV.translatesAutoresizingMaskIntoConstraints=false//
关闭autoresizing 不关闭否则程序崩溃
//设置imageV的左边约束
let left:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.left, relatedBy:NSLayoutRelation.equal, toItem:self, attribute:
NSLayoutAttribute.left, multiplier:1, constant:10)
imageV.superview?.addConstraint(left)//自身的约束要添加到父控件上
let top:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.top, relatedBy:NSLayoutRelation.equal, toItem:self, attribute:
NSLayoutAttribute.top, multiplier:1, constant:10)
imageV.superview?.addConstraint(top)//自身的约束要添加到父控件上
let wid:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.width, relatedBy:NSLayoutRelation.equal, toItem:nil, attribute:
NSLayoutAttribute.notAnAttribute, multiplier:1, constant:50)
imageV.addConstraint(wid)//宽度的约束可以添加到自己身上
let heig:NSLayoutConstraint=NSLayoutConstraint(item:
imageV, attribute:
NSLayoutAttribute.height, relatedBy:NSLayoutRelation.equal, toItem:nil, attribute:
NSLayoutAttribute.notAnAttribute, multiplier:1, constant:50)
imageV.addConstraint(heig)//高度的约束可以添加到自己的身上
===========VFL布局
自动布局类函数
NSLayoutConstraint.constraints(
withVisualFormat: VLF公式
options: [],
metrics: 约束数值字典[Strong : 数值],
views: 视图字典[String : 子视图])
VLF 可视化格式语言
H : 水平方向
V : 垂直方向
| 边界
[] 包含空间的名称字符串, 对应关系在views字典中定义
() 定义空间的宽/高, 可以再metrics中指定, 具体是宽还是高, 看布局方向
示例代码
// metrics: 定义 VFL 中 () 指定的参数映射关系
// views: 定义VFL 中的控件名称和实际名称的映射关系
let viewDic = ["maskIconView" : maskIconView,
"registerButton" : registerButton
] as [String :
Any]
let metrics = ["spacing" :
-35]
// 设置约束: 左边界 - 零间距 - 视图maskIconView - 零间距 - 右边界
addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "H:|-0-[maskIconView]-0-|",
options: [],
metrics: nil,
views: viewDic))
// 设置约束: 上边界 - 零间距 - 视图maskIconView(高100) - (间距-35) - 视图registerButton - 右边界
addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "V:|-0-[maskIconView(100)]-(spacing)-[registerButton]-|",
options: [],
metrics: metrics,
views: viewDic))
相关文章推荐
- Swift自动布局SnapKit(类似OC下的Massonry)的详细使用介绍
- Swift - 自动布局库SnapKit的使用详解
- iOS.swift 关于swift的自动布局snapkit第三方的使用记录
- iOS系统自带的自动布局--NSLayoutContraint
- Swift - 自动布局库SnapKit的使用详解(配置、使用方法、样例)
- Swift 自动布局框架-SnapKit
- 论坛源码推荐(6月24日):用Swift实现的自动布局和翻转动画以及iOS iBeacon项目
- swift开发笔记28 使用系统自带地图
- Swift网络请求,数据模型,图片缓存,自动布局,上拉刷新下拉加载
- iOS: 学习笔记, 用代码驱动自动布局实例(swift)
- NSLayoutConstraint 自动布局关系说明 Anchor iOS Swift
- 使用系统自带CheckBox实现单选效果的2个线性布局切换
- 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度
- 系统自动布局
- Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇
- WIN7上实现一开机就自动连接宽带 && WIN7自带的系统备份和还原 && WIN7盘符混乱 && WIN7查看隐藏文件 && WIN7禁止提示更新 && WIN7备份和恢复
- VFL、SnapKit、masonry 三种自动布局的使用
- iOS系统自带的 UIAlertView 自动旋转的实现
- Unity3d自带的自动寻路系统(一)
- Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少