【问题标题】:UIStackView seems to stack spacing even when arranged subviews are hidden即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距
【发布时间】:2017-04-27 12:41:39
【问题描述】:

我的水平堆栈视图中有 5 个元素。在某一时刻,我隐藏了索引 1 和 2 处的元素。我的间距为 1pt,似乎当元素 1 和 2 被隐藏时,元素 0 和 3 之间的间距是元素 0 和 1、1 之间的间距之和和 2,以及 2 和 3。 我的堆栈视图属性是:

stackView.axis = .horizontal
stackView.distribution = .fillEqually
stackView.spacing = 1pt

我的问题是:如何删除这些间距的总和。在我看来,它不应该这样。所以我错过了什么吗?

【问题讨论】:

  • 您可能需要从堆栈中删除视图 - 只是隐藏它们不会消除间距。
  • 我认为它违背了 isHidden 属性链接到堆栈视图的排列子视图的目的。
  • 来自 Apple 的文档:“似乎从堆栈中删除了第一个排列的视图。该视图仍在堆栈内,只是不再可见,不再对布局做出贡献。” -- 因此,View 不再对布局有贡献,但由于它仍然“存在”,所以仍然使用 spacing 值。 (注:我不为 Apple 工作 - 只是我的解释)
  • 好的,谢谢 DonMag 我想我会删除它们。但客观地说,当您查看它在 CSS 和 Android 中是如何完成的时,相对于元素的间距被删除了。这种行为对我来说听起来既合乎逻辑又很有帮助。

标签: ios uistackview


【解决方案1】:

我遇到了同样的问题,至少我是这么认为的。在我的情况下,问题的原因是我错误地隐藏了视图的单个子项而不是视图(以前是堆栈视图的直接后代的子项),因此视图在视觉上似乎没有被渲染它是。更改为隐藏实际视图会使问题消失。

简而言之,我有一个UILabel,它被添加到我正在隐藏/取消隐藏的UIStackView 中。后来我将标签嵌入到一个视图中并且错过了更改我隐藏/取消隐藏的出口,所以我一直在玩标签,导致它的父级仍然在堆栈视图中呈现(高度为零)。

【讨论】:

  • 我不确定我是否理解。 “视图的独生子女”是什么意思?
  • @Plot 我更新了答案,让我知道现在是否有意义。
  • 这是正确的答案,+1
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2018-08-19
  • 2017-05-31
相关资源
最近更新 更多