堆叠视图,折叠空间到内容

时间:2018-01-07 20:46:35

标签: ios swift xcode uistackview

我有一个带有三个嵌套标签的垂直StackView

  • 堆栈视图
    • PlusMinus(标签)
    • 货币(标签)
    • 金额(标签)

标签中的内容是动态的。我希望堆栈视图让3个项目彼此相邻,彼此之间的间距非常小。这样的示例值会读取类似“+ $ 45.67”的内容,但似乎Stack View下的所有分发选项都无法完成此操作。每个标签下的单独字体和颜色设置是不同的,所以我不能简单地使用1个标签。

无论如何要说垂直堆栈视图中的每一列只能占用嵌套Label占用的空间。

1 个答案:

答案 0 :(得分:0)

您需要适当地设置内容拥抱和标签的文本对齐方式。

因此,如果整个事情要正确对齐,你可以这样做:

    self.signLabel.setContentHuggingPriority(.init(rawValue: 300), for: .horizontal)
    self.currencyLabel.setContentHuggingPriority(.init(rawValue: 400), for: .horizontal)
    self.valueLabel.setContentHuggingPriority(.init(rawValue: 500), for: .horizontal)
    self.signLabel.textAlignment = .right
    self.currencyLabel.textAlignment = .right
    self.valueLabel.textAlignment = .right

如果它要保持对齐,你可以这样做:

    self.signLabel.setContentHuggingPriority(.init(rawValue: 500), for: .horizontal)
    self.currencyLabel.setContentHuggingPriority(.init(rawValue: 400), for: .horizontal)
    self.valueLabel.setContentHuggingPriority(.init(rawValue: 300), for: .horizontal)
    self.signLabel.textAlignment = .left
    self.currencyLabel.textAlignment = .left
    self.valueLabel.textAlignment = .left

(只要它们保持递增顺序,您就可以改变数字。)

这样做的目的是为布局系统提供线索,告知UILabel应该压缩哪些UILabel首先拥抱它的内容。

这应该可以将UIStackView设置为水平并使用默认设置。