对于自动布局:

我们在 StoryBoard 中可以使用约束实现,简单明了,但如果用纯代码来设置约束就很麻烦了

OC里面,我们常用的有Masonry,SDAutoLayout

Swift里,我们有SnapKit:GitHub下载链接

一、项目集成

pod 'SnapKit'
import SnapKit

SnapKit的使用方法

通过 snp.makeConstraints 方法给view添加约束,约束有几种,分别是边距,宽,高,左上右下距离,基准线。
同时,添加过约束后可以有修正,修正有位移修正(inset、offset)和倍率修正(multipliedBy)

语法一般是: make.equalTo 或 make.greaterThanOrEqualTo 或 make.lessThanOrEqualTo + 倍数和位移修正。 .equalTo:等于
.lessThanOrEqualTo:小于等于
.greaterThanOrEqualTo:大于等于
注意: 使用 snp.makeConstraints 方法的元素必须事先添加到父元素的中,例如:self.view.addSubview(view)
视图属性(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

对于如何使用SnapKit,这里简单讲一些常用的场景:

环境:Xcode8.1

语言:Swift3.0

场景1:

在view中心添加一个长宽200的view

  box1.snp.makeConstraints({ (make) in
make.width.height.equalTo()
make.center.equalTo(self.view)
})

场景2:

在红色view里,添加一个子view,距离顶部30px

box1.backgroundColor = UIColor.red
box2.backgroundColor = UIColor.green
view.addSubview(box1)
box1.addSubview(box2)
box1.snp.makeConstraints({ (make) in make.width.height.equalTo()
make.center.equalTo(self.view)
})
box2.snp.makeConstraints({ (make) in make.top.equalTo(box1.snp.top).offset() //距离box1 30距离
make.left.equalTo(box1) //等效于 make.left.equalTo(box1.snp.left)
make.right.equalTo(box1)
make.height.equalTo() })

场景3:

添加两个view,高宽相等,绿色的紧靠红色上下排列

   box1.backgroundColor = UIColor.red
box2.backgroundColor = UIColor.green
view.addSubview(box1)
view.addSubview(box2)
box1.snp.makeConstraints({ (make) in
make.left.equalTo() //距离左边20
make.right.equalTo(-) //距离右边20,注意,这里要为负的20
make.top.equalTo()
make.height.equalTo()
})
box2.snp.makeConstraints({ (make) in make.top.equalTo(box1.snp.bottom) //顶部靠着box1底部
make.left.right.height.equalTo(box1) //左右高和box1对齐 })

场景4:

添加两个view,高宽相等,左右排列

box1.backgroundColor = UIColor.red
box2.backgroundColor = UIColor.green
view.addSubview(box1)
view.addSubview(box2)
box1.snp.makeConstraints({ (make) in
make.width.height.equalTo()
make.left.equalTo(view)
make.top.equalTo()
})
box2.snp.makeConstraints({ (make) in make.size.equalTo(box1) //大小等于box1
make.top.equalTo(box1) //顶部和box1对齐
make.right.equalTo(view) })

场景5:

添加两个view,绿色大小为红色一半,上下排列

 box1.backgroundColor = UIColor.red
box2.backgroundColor = UIColor.green
view.addSubview(box1)
view.addSubview(box2)
box1.snp.makeConstraints({ (make) in make.size.equalTo(CGSize(width: , height: ))
make.centerX.equalTo(view)
make.centerY.equalTo(view).offset(-) //中心点为view中心偏上100距离
})
box2.snp.makeConstraints({ (make) in make.size.equalTo(box1).multipliedBy(0.5) //大小为box1一半
make.centerX.equalTo(box1)
make.top.equalTo(box1.snp.bottom).offset() })

场景6:

添加两个view,绿色在红色里面,内边距设置为依次10、20、30、40

 box1.backgroundColor = UIColor.red
box2.backgroundColor = UIColor.green
view.addSubview(box1)
box1.addSubview(box2)
box1.snp.makeConstraints({ (make) in
make.width.height.equalTo()
make.center.equalTo(self.view)
})
box2.snp.makeConstraints({ (make) in
//内距box1边距分别为10、20、30、40
make.edges.equalTo(box1).inset(UIEdgeInsetsMake(, , , ))
})

总结:

以上几种是比较常用的使用场景,涉及到一些基本属性。

其实多用几次之后,会发现和Masonry很像,还是比较容易上手的。

 

Demo下载地址

共勉~~

iOS SnapKit自动布局使用详解的更多相关文章

  1. iOS SnapKit自动布局使用详解(Swift版Masonry)

    对于自动布局: 我们在 StoryBoard 中可以使用约束实现,简单明了,但如果用纯代码来设置约束就很麻烦了 OC里面,我们常用的有Masonry,SDAutoLayout Swift里,我们有Sn ...

  2. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  3. iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...

  4. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  5. [转]iOS学习之UINavigationController详解与使用(三)ToolBar

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...

  6. IOS 友盟使用详解

    IOS 友盟使用详解 这篇博客将会详细介绍友盟的使用,希望对博友们有所帮助. 首先我们在浏览器上搜索友盟. 在这里我们选择官网这个,进去友盟官网后我们按照下图进行选择. 接下来选择如下图 Next 这 ...

  7. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  8. [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...

  9. iOS中—触摸事件详解及使用

    iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...

随机推荐

  1. 蓝桥网试题 java 基础练习 十六进制转八进制

    - -------------------------------------------------------------------------------------------------- ...

  2. .net 基础服务开源战略规划备忘录

    公司现状 1. 技术人员水平限制: 基础研发人员技术细节,性能处理能力不足,技术视野不够开阔;甚至一些高可用,高性能方案的概念都未听闻,更别提发展方向和思路了,令人痛心. 2. 技术反馈渠道限制: 公 ...

  3. Android微信朋友圈全文、收起功能

    在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...

  4. Android 如何保证service在后台不被kill

    Android 其实无法做多绝对的不被后台kill掉,我们只能尽量使用一些操作提升不被kill的机会. 一.onStartCommand方法,返回START_STICKY   START_STICKY ...

  5. 【easyui】之treegrid的分页

    easyui官网给的treegrid的分页是相当的复杂,我们来简化一下! 首先treegrid 分页和 datagrid一样需要设置一系列参数! 如下: depTreeGrid=$("#de ...

  6. Fiddler教程【转】

    阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...

  7. Angular2组件与指令的小实践——实现一个图片轮播组件

    如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...

  8. js设计模式--单体模式

    GOF里的23种设计模式, 也是在软件开发中早就存在并反复使用的模式. 如果程序员没有明确意识到他使用过某些模式, 那么下次他也许会错过更合适的设计 (这段话来自<松本行弘的程序世界>). ...

  9. Unity 碰撞器和触发器的理解

    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...

  10. 每天一个linux命令(33)--df命令

    周末是学习的好时光. 每天一个Linux命令,接下来是磁盘存储相关的,df, du命令 Linux中 df  命令的功能是用来检查Linux 服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬 ...