UIStackView

UIStackView 顾名思义是一个视图堆栈 ,换句话说就是个容器。

和传统容器类的区别:虽然继承自 UIView,但本身不能自我渲染,如设置它的 backgroundColor 是无效的。主要的作用是处理子View 的位置、大小和布局。

适用场景:就像 iPad 、笔记本 、手机的关系,谁也代替不了谁,各有所长。像那些手写Constraint太繁琐,用TableView/CollectionView 又太笨重的情况,就比较适合StackView。如下图👇🏻

stackView的适用场景.png

用法

====第一种创建方式
let stackView = UIStackView()
view.addSubview(stackView)
stackView.addArrangedSubview(subView1)
stackView.addArrangedSubview(subView2)
====第二种创建方式
let stackView = UIStackView(arrangedSubviews: [subView1, subView2])

把子View加到StackView ,调用的不是传统的 addSubview,而是addArrangedSubview

addSubview添加的子view,它们的顺序实际上是图层覆盖,也就是z轴
arrangedSubviews添加的子view,它们的顺序是并列的,即视x轴和y轴

stackView of view hierarchy.png

StackView 有几个重要的属性

axis

  • horizontal 水平方向 (默认)
  • vertical 垂直方向

distribution 分布:描述和 axis 方向一致的元素之间的布局关系

  • fill (默认)
  • fillEqually 等宽/高 布局
  • fillProportionally 按比例布局
  • equalSpacing 等间距布局
  • equalCentering 等中间线间距布局

alignment:描述和 axis 垂直的元素之间的布局关系

  • fill (默认) 尽可能铺满
  • center 居中对齐
  • leading 当 axis 是 vertical 的时候,按 leading 方向对齐 等价于: 当 axis 是 horizontal 的时候,按 top 方向对齐
    spacing
    元素之间的边距值

自定义边距能力( iOS11+ 的特性)

设置一个元素后面的边距

func setCustomSpacing(_ spacing: CGFloat, 
          after arrangedSubview: UIView)

参考资料:
https://juejin.im/post/5c2ee162e51d4550fc42ac57

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容