即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距
Posted
技术标签:
【中文标题】即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距【英文标题】:UIStackView seems to stack spacing even when arranged subviews are hidden 【发布时间】: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 中是如何完成的时,相对于元素的间距被删除了。这种行为对我来说听起来既合乎逻辑又很有帮助。 【参考方案1】:我遇到了同样的问题,至少我是这么认为的。在我的情况下,问题的原因是我错误地隐藏了视图的单个子项而不是视图(以前是堆栈视图的直接后代的子项),因此视图在视觉上似乎没有被渲染它是。更改为隐藏实际视图会使问题消失。
简而言之,我有一个UILabel
,它被添加到我正在隐藏/取消隐藏的UIStackView
中。后来我将标签嵌入到一个视图中并且错过了更改我隐藏/取消隐藏的出口,所以我一直在玩标签,导致它的父级仍然在堆栈视图中呈现(高度为零)。
【讨论】:
我不确定我是否理解。 “视图的独生子女”是什么意思? @Plot 我更新了答案,让我知道现在是否有意义。 这是正确的答案,+1以上是关于即使隐藏了排列的子视图,UIStackView 似乎也会堆叠间距的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIStackView 内排列的子视图上设置自定义高度?
UIStackView:基于所有子视图的一致高度,即使它们丢失