具有一个静态和一个动态子级的堆栈视图?

Posted

技术标签:

【中文标题】具有一个静态和一个动态子级的堆栈视图?【英文标题】:Stack view with one static and one dynamic child? 【发布时间】:2021-02-20 20:06:42 【问题描述】:

即使在阅读了数十篇文章和答案之后,我仍然很难理解如何使这项工作按我的意愿工作。

我想制作一个带有两个UIView 孩子的垂直堆栈视图。在第一个孩子里面,我想要一个静态高度的标签。在第二个孩子内部,我想要一个动态高度的标签(即任意数量的行长)。

现在,我是这样设置的:

- Content view
    - Stack view (top, right, bottom, and left constraints set to superview, distribution set to Fill)
        - UIView (vertical content hugging set to 251)
            - Label (top, right, bottom, and left constraints set to superview)
        - UIView (vertical content hugging set to 249)
            - Label (top, right, bottom, and left constraints set to superview)

这就是事情变得奇怪的地方。有时,第二个孩子真的很高(比它的内容高),有时它比它的内容小(即如果标签中的文本应该出现在 2 或 3 行,它只显示第一行)。

我做错了什么??

【问题讨论】:

我刚刚发现,如果我删除第二个 UIView 并简单地用第二个标签替换它,它就可以工作。那么为什么当标签嵌入UIView时它不起作用? 【参考方案1】:

你可能想多了。我创建了我认为您的视图层次结构:

我没有摆弄任何压缩或内容拥抱值。当我更改第二个标签的文本时,整个内容,直到内容视图(它是灰色的,所以我们可以看到它),都会正确调整:

【讨论】:

您对标签设置了哪些限制?他们有底部约束吗? 是的,当然。除了灰色内容视图之外的所有内容都在所有四个方面都有约束。但是标签周围的视图没有限制;堆栈视图创建这些。真的和你描述的一样 我真的不明白。就我而言,我正在做你正在做的事情,但有时标签上方和下方会有大量填充,但仅限于某些单元格。 我不知道这个故事中的“细胞”是什么。 “细胞”一词不会出现在您的问题中的任何地方。在我看来,你问这个问题的方式忽略了你真正问题的重点,不管它是什么。我所展示的是堆栈视图结构本身不是问题,因为这是您所问的。如果有“细胞”,也许你应该问一个新的问题。我回答了这个问题。 我不知道是不是这样。我考虑了你提出的问题,而不是其他问题。您提出的问题中没有单元格。就我而言,内容视图是您的层次结构的顶部。

以上是关于具有一个静态和一个动态子级的堆栈视图?的主要内容,如果未能解决你的问题,请参考以下文章

将动态插槽从父级传递到子级到孙子级

堆栈溢出 - 静态内存与动态内存

fastadmin介绍

fastadmin介绍

fastadmin介绍

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度