iOS 中使用 FlexBox 布局实现图片九宫格

栏目: CSS · 发布时间: 4年前

内容简介:首发于公众号在 iOS 中官方支持的布局方式是 AutoLayout,是一种基于控件之间相互约束关系的自动布局工具。官方的 AutoLayout 虽然用起来简单,但是有两个非常不方便的地方:

首发于公众号

在 iOS 中官方支持的布局方式是 AutoLayout,是一种基于控件之间相互约束关系的自动布局工具。

官方的 AutoLayout 虽然用起来简单,但是有两个非常不方便的地方:

  1. 原生 API 接口使用不友好
  2. 约束越多性能损失越多

第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 中使用 FlexBox 布局实现图片九宫格

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法Ⅰ-Ⅳ

算法Ⅰ-Ⅳ

塞奇威克 / 中国电力出版社 / 2003-11 / 70.00元

《算法I-IV(C实现):基础、数据结构、排序和搜索(第3版)(影印版)》实为一个卓越的读本,作为一个普通的程序员,如果在数学分析方面不算熟练,同时又对理论算法很感兴趣,那么这《算法I-IV(C实现):基础、数据结构、排序和搜索(第3版)(影印版)》确定不容错过,由此你将获益匪浅。Sedgewick擅长深入浅出的方式来解释概念,他在这方面确有天分。另外书中使用了一些实践程序,其篇幅仅有一页左右,而......一起来看看 《算法Ⅰ-Ⅳ》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具