UIStackView 顾名思义是一个视图堆栈 ,换句话说就是个容器。
和传统容器类的区别:
虽然继承自 UIView,但本身不能自我渲染,如设置它的 backgroundColor 是无效的。主要的作用是处理子View 的位置、大小和布局。
适用场景:
就像 iPad 、笔记本 、手机的关系,谁也代替不了谁,各有所长。像那些手写Constraint太繁琐,用TableView/CollectionView 又太笨重的情况,就比较适合StackView。如下图👇🏻
用法
====第一种创建方式
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 有几个重要的属性
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)