Skip to content

5.2_设置distribution和alignment属性 ​

UIStackView 的 Distribution 属性详解 ​

UIStackView 的 distribution 属性决定了 arranged subviews 在 stack view 中的布局方式。它控制着子视图如何填充 stack view 的空间。理解 distribution 是掌握 UIStackView 布局的关键。让我们一起深入了解吧!🎉

distribution 属性有几个重要的选项,每个选项都会以不同的方式影响子视图的布局。这些选项包括:

  • Fill: 子视图会填充整个 stack view 的空间。
  • FillEqually: 所有子视图的大小相同,并填充整个 stack view 的空间。
  • FillProportionally: 子视图的大小与其内容的大小成比例。
  • EqualSpacing: 子视图之间的间距相等。
  • EqualCentering: 子视图的中心之间的间距相等。

Fill 模式 ​

Fill 模式是 distribution 属性的默认值。在这种模式下,UIStackView 会尝试填充整个可用空间。如果子视图的内容小于 stack view 的大小,子视图会拉伸以填充剩余空间。如果子视图的内容大于 stack view 的大小,子视图会被压缩以适应 stack view。

例如,如果你有一个包含两个按钮的水平 UIStackView,并且 distribution 设置为 Fill,那么这两个按钮会尽可能地填充 stack view 的宽度。

FillEqually 模式 ​

FillEqually 模式会强制所有 arranged subviews 具有相同的大小。这意味着每个子视图都会占据 stack view 中相等的空间。无论子视图的内容大小如何,它们都会被调整为相同的大小。

例如,如果你有一个包含三个标签的垂直 UIStackView,并且 distribution 设置为 FillEqually,那么这三个标签的高度将会相同,并且它们会平均分配 stack view 的高度。

FillProportionally 模式 ​

FillProportionally 模式会根据 arranged subviews 的内容大小来分配空间。这意味着内容较大的子视图会获得更多的空间,而内容较小的子视图会获得较少的空间。这种模式适用于需要根据内容动态调整大小的情况。

例如,如果你有一个包含两个图像视图的水平 UIStackView,并且 distribution 设置为 FillProportionally,那么较大的图像会占据更多的宽度,而较小的图像会占据较少的宽度。

EqualSpacing 模式 ​

EqualSpacing 模式会确保 arranged subviews 之间的间距相等。在这种模式下,UIStackView 会调整子视图的大小,以使它们之间的间距保持一致。子视图本身的大小可能会有所不同,但它们之间的间距始终相同。

例如,如果你有一个包含四个按钮的水平 UIStackView,并且 distribution 设置为 EqualSpacing,那么这四个按钮之间的间距将会相等。

EqualCentering 模式 ​

EqualCentering 模式会确保 arranged subviews 的中心之间的间距相等。这意味着 UIStackView 会调整子视图的位置,以使它们的中心点之间的距离保持一致。这种模式适用于需要保持子视图中心对齐的情况。

例如,如果你有一个包含三个视图的水平 UIStackView,并且 distribution 设置为 EqualCentering,那么这三个视图的中心点之间的距离将会相等。

UIStackView 的 Alignment 属性详解 ​

UIStackView 的 alignment 属性决定了 arranged subviews 在 stack view 的主轴上的对齐方式。它控制着子视图在 stack view 中的位置。

alignment 属性有几个选项,包括:

  • Fill: 子视图会填充整个 stack view 的空间。
  • Leading: 子视图与 stack view 的前边缘对齐。
  • Trailing: 子视图与 stack view 的后边缘对齐。
  • Center: 子视图在 stack view 中居中对齐。
  • Top: 子视图与 stack view 的顶部对齐。
  • Bottom: 子视图与 stack view 的底部对齐。
  • FirstBaseline: 子视图与 stack view 的第一个基线对齐。
  • LastBaseline: 子视图与 stack view 的最后一个基线对齐。

示例代码 ​

swift
let stackView = UIStackView()
stackView.axis = .horizontal // 或者 .vertical
stackView.distribution = .fillEqually
stackView.alignment = .center
stackView.spacing = 10

// 添加 arranged subviews
let view1 = UIView()
view1.backgroundColor = .red
stackView.addArrangedSubview(view1)

let view2 = UIView()
view2.backgroundColor = .blue
stackView.addArrangedSubview(view2)

// 设置 stack view 的约束
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20).isActive = true
stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20).isActive = true
stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20).isActive = true
stackView.heightAnchor.constraint(equalToConstant: 50).isActive = true

通过调整 distribution 和 alignment 属性,你可以灵活地控制 UIStackView 中子视图的布局。希望这些解释能帮助你更好地理解和使用 UIStackView!🚀

本站使用 VitePress 制作