带有 setCustomSpacing 的 UIStackView 用于子视图的动态数量

UIStackView with setCustomSpacing for dynamic number of Subviews

我有一个带有动态子视图数量和类型的堆栈视图,但我总是添加一个静态元素作为堆栈视图的最后一个元素,它之前需要 30 个间距。

我有以下代码似乎为每个视图分配了 30 个间距的问题,尽管它应该只在最后一次迭代中这样做:

stackView = {
    let stackView = UIStackView()
    stackView.axis = .vertical
    stackView.distribution = .equalSpacing
    stackView.translatesAutoresizingMaskIntoConstraints = false
    
    return stackView
}()

for (index, element) in elements.enumerated() {
    let initializedClass = element
    let initializedView = initializedClass.view

    self.addChild(initializedClass)
    initializedClass.didMove(toParent: self)

    self.stackView.addArrangedSubview(initializedView!)
    // default spacing of 5
    var spacing = 5

    if index == elements.endIndex - 1 {
        // the last element should have 30 spacing after it
        // what happens is that all elements have 30 spacing
        spacing = 30
    }

    self.stackView.setCustomSpacing(CGFloat(spacing), after: initializedView!)
}

// I'm adding another element here

问题:为什么每个添加的子视图都有 30 个间距,而不是最后一个?

您的 stackView.distribution = .equalSpacing 与您尝试定义的自定义间距相矛盾。使用 equalSpacing 时,您告诉 UIStackView 排列其视图,以便它们填充可用的 space 沿堆栈视图的轴,但同时您告诉它设置您的自定义间距,这会导致问题。尝试使用 stackView.distribution = .fill 而不是 .equalSpacing。另见:equalSpacing