内容简介:首发于公众号在 iOS 中官方支持的布局方式是 AutoLayout,是一种基于控件之间相互约束关系的自动布局工具。官方的 AutoLayout 虽然用起来简单,但是有两个非常不方便的地方:
首发于公众号
在 iOS 中官方支持的布局方式是 AutoLayout,是一种基于控件之间相互约束关系的自动布局工具。
官方的 AutoLayout 虽然用起来简单,但是有两个非常不方便的地方:
- 原生 API 接口使用不友好
- 约束越多性能损失越多
第1个问题可以使用第三方库来解决,比如 SnapKit(swift)、Masonry(oc)。 性能问题则无解,对于混合布局的 Cell 如果全部使用自动布局就会看到很明显的滑动卡顿。
对于复杂 Cell 布局,程序员们为了追求极致的帧率,一般都采用手写布局,帧率是上去了而维护的成本也最高。
为了兼顾易用性和高效率,Facebook 开发并开源了自己的布局库:Yoga。
Yoga 是 FlexBox 的子集,并没有全部实现 FlexBox,但是对于大部分应用场景已经足够了。
接触过前端开发的朋友对 FlexBox 布局一定不陌生,CSS 写 flex 布局真的太方便了。
FlexBox 是不同于 AutoLayout 的布局方式,FlexBox 是自约束,每个控件的位置都是相对于自身所在的 Box 相对布局,这就不存在 AutoLayout 基于控件间约束的耦合。
Yoga 是基于手动布局的方式,这样效率就很高,而且性能损耗很小,而且使用很简单,用过 Masonry 的同学可以很快上手。
使用方法:
override init(frame: CGRect) {
super.init(frame: frame)
contentView.configureLayout { (layout) in
layout.isEnabled = true
}
override func layoutSubviews() {
super.layoutSubviews()
yoga.applyLayout(preservingOrigin: true)
}
复制代码
layout.isEnabled = true 开启 yoga 布局, 在 layoutSubviews 中使用 applyLayout 自动调整布局。
这和手动布局的流程是一样的,可以看出来 yoga 本质上也是手动布局,只是再也不用手算坐标了。
yoga 同时也有很好的易用性,比如要实现一个简单的九宫格,只需要简单的设置一下布局参数。
override init(frame: CGRect) {
super.init(frame: frame)
configureLayout { (layout) in
layout.isEnabled = true
}
contentView = UIView(frame: bounds)
addSubview(contentView)
contentView.configureLayout { (layout) in
layout.isEnabled = true
layout.flexDirection = .row
layout.flexWrap = .wrap
layout.flexGrow = 1
}
for _ in 0...8 {
let imageView = UIImageView(frame: .zero)
imageView.backgroundColor = .orange
contentView.addSubview(imageView)
imageView.configureLayout { (layout) in
layout.isEnabled = true
layout.width = 86
layout.height = 86
layout.marginTop = 10
layout.marginLeft = 10
}
}
}
override func layoutSubviews() {
super.layoutSubviews()
yoga.applyLayout(preservingOrigin: true)
}
复制代码
核心参数是 layout.flexWrap = .wrap ,让视图布局自动换行,再计算好间距和宽高,这样就实现了九宫格的排列效果。
运行的效果:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS九宫格布局
- 小程序—九宫格心形拼图
- Python处理图片九宫格,炫酷朋友圈
- iOS swift 最好用的 手势密码 九宫格
- iOS 仿新浪微博 九宫格 gif 循环播放
- css经典布局系列三——三列布局(圣杯布局、双飞翼布局)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML Dog
Patrick Griffiths / New Riders Press / 2006-11-22 / USD 49.99
For readers who want to design Web pages that load quickly, are easy to update, accessible to all, work on all browsers and can be quickly adapted to different media, this comprehensive guide represen......一起来看看 《HTML Dog》 这本书的介绍吧!