带有 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
我有一个带有动态子视图数量和类型的堆栈视图,但我总是添加一个静态元素作为堆栈视图的最后一个元素,它之前需要 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