更简单地进行Auto Layout--SnapKit 支持swift
OC下的autolayout神器Masonry大家已经很熟悉了。但是masonry在swift下使用并不方便。所以同一个团队开发出了swift下的autolayout库:SnapKit
snapkit从0.14开始支持swift2.0并且支持iOS7。不过常规的导入方法只支持iOS8.0+。
- 1 GitHub链接:https://github.com/SnapKit/SnapKit
学习一下第三方的约束管理。其中SnapKit适用于Swift,Masonry适用于OC。
2、安装:
1.直接下载:在Github上下载SnapKit,找到SnapKit.framework,然后放到自己的工程中即可。SnapKit.framework文件包括:
屏幕快照 2016-04-08 上午11.47.00.png2.Cocoapods安装
在项目的Podfile下添加如下信息 在终端中执行:pod install(注意路径是当前项目中Podfile锁在路径)platform :ios, '8.0' use_frameworks! target '你的工程名称' do pod 'SnapKit' endSnapKit本身不支持IOS7,如果希望SnapKit支持IOS7版本,需要在自己的项目的 Build Setting 中搜索的 OTHER_SWIFT_FLAGS,在其下面添加 -DSNAPKIT_DEPLOYMENT_LEGACY,如下图所示:(否则会报错!)
在使用之前,先看一下Snapkit官方文档翻译
swift let box = UIView() superview.addSubview(box) box.snp_makeConstraints { (make) -> Void in //注释:box距离父视图上下左右边距都是20像素 make.edges.equalTo(superview).inset(UIEdgeInsetsMake(20, 20, 20, 20)) }如果你想 视图 view.left 大于等于 label.left ,执行下面代码:
swift //下面这两者的约束是完全一样的 make.left.greaterThanOrEqualTo(label) make.left.greaterThanOrEqualTo(label.snp_left)- 3.严格检测(Strick Checks)
swift make.top.equalTo(42) make.height.equalTo(20) make.size.equalTo(CGSizeMake(50,100)) make.edges.equalTo(UIEdgeInsetsMake(10,0,10,0)) make.left.equalTo(view).offset(UIEdgeInsetsMake(10,0,10,0)) 4.学习优先级
- priority: 允许您指定一个确切的优先级
- priorityHigh: 高优先级 等价于 UILayoutPriority.DefaultHigh
- priorityMedium:中优先级
- priorityLow:低优先级 UILayoutPriority.DefaultLow
优先级可以放在约束链的结束处,例如
swift //当前视图的左边>=label的底部 低优先级 make.left.greaterThanOrEqualTo(label.snp_left).priorityLow() //当前视图与label的顶部齐平,优先级:600 make.top.equalTo(label.snp_top).priority(600)5.组成,组成,组成
SnapKit 也可以提供一些便利的方法来同时创建多约束1.edges(边缘)
swift //让当前视图 的 上下左右(top,left,bottom,right) 等于 view2 make.edges.equalTo(view2) // make top = superview.top + 5; left = superview.left +10 // bottom = superview.bottom -15; right = superview.right - 20 make.edges.equalTo(superView).inset(UIEdgeInsetsMake(5,10,15,20))2.size(尺寸)
swift //当前视图宽高 >= titleLabel make.size.greaterThanOrEqualTo(titleLabel) //make width = superview.width + 100; height = superview.height -50 //即 当前视图宽 = 父视图 + 100,高 = 父视图.高 - 50 make.size.equalTo(superview).offset(CGSizeMake(100, -50))3.center(中心)
swift //当前视图与 button1中心相同 (centerX 和 centerY) make.center.equalTo(button1) //make centerX = superview.centerX - 5; centerY = superview.centerY +10 make.center.equalTo(superview).offset(CGPointMake(-5,10))可以串连视图属性增加可读性
swift //所有边缘除了top都等于父视图, top为20 make.left.right.bottom.equalTo(superview) make.top.equalTo(20)6.Hold on for dear life
有时候你需要修改已经存在的约束为了移动或者移除、代替约束。在SnapKit 有一些不同的方法更新约束
1.引用(References)
你可以通过将约束的结果赋值给一个局部变量或一个类属性来保持一个特定的约束的引用。您还可以将多个约束引用存储在数组中。swift var topConstraint: Constraint? = nil //当制作约束时 view1.snp_makeConstraints{ (make) -> Void in self.topConstrain = make.top.equalTo(superview).offset(padding.top).constraint make.left.equalTo(superview).offset(padding.left) // 然后接下来你可以这样 self.topConstraint.uninstall() //或者如果你想要更新约束 self.topConstraint.updateOffset(5)2.snp_updateConstraints(更新约束)
如果你仅仅想更新一个常数给一个约束,你可以使用方法snp_updateConstraints来代替snp_makeConstraintsswift //这是一个苹果官方推荐的添加和更新约束的地方 //这个方法在响应<code>setNeedsUpdateConstraints</code>多次调用 //这个方法可以倍UIKit调用 override func updateConstraints() { self.growingButton.snp_updateConstraints{ (make) -> Void in make.center.equalTo(self); make.width.equalTo(self.buttonSize.width).priorityLow() make.height.equalTo(self.buttonSize.height).priorityLow() make.width.lessThanOrEqualTo(self) make.height.lessThanOrEqualTo(self) } //父类可以调用 super.updateConstraints() }3.snp_remakeConstraints(重做约束)
snp_remakeConstraints与snp_makeConstraints类似,但是首先会先清除掉所有被SnapKit设置的约束swift func changeButtonPosition() { self.button.snp_remakeConstraints{ (make) -> Void in make.size.equalTo(self.buttonSize) if topLeft { make.top.left.equalTo(10) } else { make.bottom.equalTo(self.view).offset(-10) make.right.equalTo(self.view).offset(-10) } } }
更简单地进行Auto Layout--SnapKit 支持swift的更多相关文章
- 从 Auto Layout 的布局算法谈性能
这是使用 ASDK 性能调优系列的第二篇文章,前一篇文章中讲到了如何提升 iOS 应用的渲染性能,你可以点击 这里 了解这部分的内容. http://t.cn/Rc4KbUC 在上一篇文章中,我们提到 ...
- Swift语言Auto Layout入门教程:上篇
原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...
- 【转】使用 Auto Layout 的典型痛点和技巧
layoutIfNeeded()强制立刻更新布局 原文网址:http://www.jianshu.com/p/0f031606e5f2 官方文档:Auto Layout Guide 加上去年WWDC上 ...
- 深入理解Auto Layout 第一弹
本文转载至 http://zhangbuhuai.com/2015/07/16/beginning-auto-layout-part-1/ By 张不坏 2015-07-16 更新日期:2015-07 ...
- WWDC2018 之 高性能 Auto Layout
1. 关于 Auto Layout 的历史渊源 上世纪 90 年代,名叫 Cassowary的布局算法,通过将布局问题抽象成线性不等式,并分解成多个位置间的约束,解决了用户界面的布局问题. Apple ...
- Auto Layout深入理解,及masonry简单介绍
本篇博客是本人在学习自己主动布局过程中对自己主动布局的理解和整理,分三部分介绍,内容可能会有所反复.见谅. 一.autosizing与Auto Layout对照,及Auto Layout简单介绍 1. ...
- ios8来了,屏幕更大,准备好使用 iOS Auto Layout了吗?
引言: Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 要完全掌握Au ...
- swift 约束 - SnapKit 适配iPhoneX 安全区 和苹果自带的VFL ,auto layout 安全区适配
这里tableview 是从最顶上的安全区适配的, nextBtn是最下边从安全区设置的,如果是在中间的view还是原来的写法,看2 1.安全区适配适用于Vc里面, 如果是自定义的view或封装的vi ...
- Auto Layout简单应用——以编码的方式实现Auto Layout自动布局(二)
在上一篇文章iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)中我们简单的介绍了使用Visual Format Language创建布局约束来实现自动布局,这种方法创建的布局约 ...
随机推荐
- solrcloud 配置实践
1.环境 3台虚拟机:192.168.26.129.192.168.26.131.192.168.26.132,使用命令sudo iptables -F 关闭防火墙 Solr: solr-6.1.0 ...
- [转]Linux下权限掩码umask
本文转自:http://www.cnblogs.com/123-/p/4188942.html ---------------------------------------------------- ...
- 用shell脚本写一个for循环
一.输出十遍北京 for((i=1;i<10;i++))> do> echo '北京';> done 二.死循环 for((;;))do#java -jar producer. ...
- 烂泥:KVM使用裸设备配置虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 何谓裸设备?百度百科显示: 裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件 ...
- hdu1042 N!
/* N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...
- ant+jenkins+testng+selenium集成环境搭建
一.前序工作 下载ant:http://ant.apache.org/bindownload.cgi 下载jenkins:http://jenkins-ci.org/ 下载testng:http:// ...
- 【读书笔记《Android游戏编程之从零开始》】18.游戏开发基础(碰撞检测)
1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如 ...
- 【Android Demo】通过WebService获取今日天气情况
因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...
- IT技术团队管理-总结
摘要:此文是书籍<行之有效:IT技术团队管理之道>的读书笔记. 主要是方便自己回顾. 您也可以通过此文简要了解此书的内容. 博客: http://www.cnblogs.com/jhzhu ...
- lock与C#多线程
lock与C#多线程 lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.简单讲就类似于 你去银行办理业务,一个柜台一次只能操作以为客户,而如果你要到这个柜台办理 ...