SBLayout 一行代码搞定任意难度的AutoLayout
简介:
SBLayout是基于Swift4 封装系统的约束而成的单文件约束框架,总代码700多行,支持iOS9及其以上版本,一行代码可以搞定任意难度的AutoLayout约束
使用方法如下:
实例:
let redView = UIView()
redView.backgroundColor = .red
self.view.addSubview(redView)
//使用SBLayout约束
//默认的优先级是最高的,set开头可以设置优先级
redView.height(100).width(200).centerX(equalTo: view.sb_centerX).top(equalTo: view.sb_top, constant: 100).setWidth(400, priority: .defaultLow).end()
效果图如下:
以上实例如果使用Snapkit写约束,会用到闭包,然后再make一大堆,显得很不精简,也很多余。所以在无奈之下,就自己写了SBLayout,一行代码搞定。
视图和父视图顶部约束,SBLayout只需如下操作:
exampleView.top(equalTo: fatherView.sb_top)
视图和父视图底部约束,SBLayout只需如下操作:
exampleView.bottom(equalTo: fatherView.sb_bottom)
视图和父视图左边约束,SBLayout只需如下操作:
exampleView.left(equalTo: view.sb_left)
视图和父视图右边约束,SBLayout只需如下操作:
exampleView.right(equalTo: view.sb_right)
视图宽高的赋值,SBLayout只需如下操作:
exampleView.width(constant)
exampleView.height(constant)
视图和父视图X或者Y轴居中约束,SBLayout只需如下操作:
exampleView.centerX(equalTo: view.sb_centerX)
exampleView.centerY(equalTo: view.sb_centerY)
因为SBLayout每个点约束后返回的是UIView,所以所有的约束点都可以继续在语句后面添加任意想添加的约束,如下:
exampleView.top(equalTo: view.sb_top).left(equalTo: view.sb_left).right(equalTo: view.sb_right).bottom(equalTo: view.sb_bottom).end()
SBLayout约束结束后需在最后添加.end()或者.sb()以结束约束
使用SBLayout实现动画功能:
以上图为例,首先约束红黄蓝视图,代码如下:
view.addSubview(redView)
view.addSubview(blueView)
view.addSubview(button)
view.addSubview(yellowView)
//使用SBLayout约束。结束语用sb()或者end()
redView.top(equalTo: view.sb_top, constant: 40).left(equalTo: view.sb_left, constant: 20).right(equalTo: view.sb_right, constant: -20).height(200).sb()
//set开头还可以设置优先级,默认的优先级最高(优先级的大小关系:defaultLow < defaultHigh < required)
yellowView.left(equalTo: view.sb_left, constant: 20).top(equalTo: redView.sb_bottom, constant: 40).setTop(equalTo: view.sb_top, priority: .defaultLow).width(100).height(100).end()
blueView.right(equalTo: view.sb_right, constant: -20).top(equalTo: redView.sb_bottom, constant: 40).width(100).height(100).end()
button.centerX(equalTo: view.sb_centerX).bottom(equalTo: view.sb_bottom, constant: -30).width(100).end()
然后再添加动画:
//重新约束前需解除之前的约束 解除约束**
NSLayoutConstraint.deactivate(self.redView.constraints)
//重新约束
//第一种改变高度(重写所有约束):
//self.redView.top(equalTo: self.view.sb_top, constant: 40).left(equalTo: self.view.sb_left, constant: 20).right(equalTo: self.view.sb_right, constant: -20).height(350).sb()
//第二种改变高度(单独改变高度约束):
self.redView.height(350).sb()
UIView.animate(withDuration: 2, delay: 0, options: [.curveEaseInOut,.autoreverse,.repeat], animations: {
self.view.layoutIfNeeded()
}, completion: nil)
重新约束前需使用NSLayoutConstraint.deactivate()方法将原来的约束解除掉
使用SBLayout约束不同高cell上,效果图如下:
自定义Cell里面使用SBLayout约束代码如下:
contentView.addSubview(imgView)
contentView.addSubview(contentLabel)
//使用SBLayout对imgView进行约束
imgView.top(equalTo: contentView.sb_top, constant: 10).left(equalTo: contentView.sb_left, constant: 8).right(equalTo: contentLabel.sb_left, constant: -8).height(50).width(50).end()
//使用SBLayout对contentLabel进行约束
contentLabel.top(equalTo: contentView.sb_top, constant: 10).left(equalTo: imgView.sb_right, constant: 8).right(equalTo: contentView.sb_right, constant: -8).bottom(equalTo: contentView.sb_bottom, constant: -8).height(greaterThanOrEqualTo: imgView.sb_height).end()
由此可见,项目中使用SBLayout轻量级约束框架,不仅可以在AutoLayout时事半功倍,而且在使用起来也非常简单易懂!更多功能需大家仔细探索!
SBLayout导入项目中的方法
CocoaPods:
导入项目中的方法:
使用 CocoaPods: 请先安装cocoapods,如果版本太老无法找到,请升级cocopods到最新版本 命令:pod repo update
第一步:Podfile中添加
pod 'SBLayout', '~>4.4'
并使用命令pod install完成导入
第二步:
import SBLayout
或者直接拖拽SBLayout.swift到项目中不需导入头文件即可使用。
Github源码: https://github.com/shibiao/SBLayout
君凯商联网-iOS-字唐名僧
|
请发表评论