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

Posted

技术标签:

【中文标题】堆栈视图,将空间折叠到内容【英文标题】:Stack View, Collapse Space to Content 【发布时间】:2018-01-07 20:46:35 【问题描述】:

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

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

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

有没有说垂直堆栈视图中的每一列只能占用嵌套Label占用的空间。

【问题讨论】:

您确实应该发布有关您尝试过的更多信息,但我建议您需要考虑适当地设置 UILabel 的内容拥抱和压缩阻力并设置文本对齐方式。 【参考方案1】:

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

所以如果整个事情要右对齐,你可以这样做:

    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 应该先压缩以拥抱它的内容。

这应该适用于设置为水平并使用默认设置的 UIStackView。

【讨论】:

我实际上只需要在故事板视图中编辑这个,不需要代码。谢谢。 对不起,我忘了说这一切都可以在故事板中完成。仍然很高兴现在一切正常。

以上是关于堆栈视图,将空间折叠到内容的主要内容,如果未能解决你的问题,请参考以下文章

将动画添加到 ListView 以展开/折叠内容

在列表视图项目中使用折叠不会完全删除特定项目视图的空间

堆栈视图和内容拥抱优先级 - 意外行为

Interface Builder 在每次操作后水平和向后折叠垂直堆栈视图

当列表视图中的扩展器折叠时,无法让 WPF 列表视图折叠

UIScrollView 将内容推离页面