【问题标题】:UIStackView distribution with intrinsic content size of one subview prioritisedUIStackView 分布与一个子视图的内在内容大小优先
【发布时间】:2021-04-01 10:00:45
【问题描述】:
  stackView
+------------+                +
|  topView   | height: 50     |
+------------+                |
|            |                |
|            |                | total height: 300
| bottomView | height: 250    |
|            |                |
|            |                |
+------------+                +

我想在 UIStackView (stackView) 中布局两个视图(topViewbottomView),条件如下:

  • stackView 有一个高度(比如说 300)
  • topViewbottomView 的内在内容高度相同(假设为 50)
  • topView 应该以其固有的内容高度呈现(最多 stackView 的高度)(所以 50)
  • bottomView 应该占用剩余空间(所以 250)
  • 如果 topView 的内在内容高度发生变化(假设为 100),则分布应为 100/200

UIStackView 的所有分发方式都无法涵盖这一点。

使用常量设置约束在这里没有帮助,因为 topView 的内在内容高度可能会改变。

所以我需要一些自动布局功能。我尝试设置不同的内容压缩阻力优先级和内容拥抱优先级。如果没有成功,我仍然觉得它们可以成为一个解决方案(如果我知道如何正确使用它们的话)。

这似乎不是一个复杂的问题,我找不到合适的 Auto Layout API。有什么提示吗?

【问题讨论】:

    标签: swift autolayout uistackview intrinsic-content-size


    【解决方案1】:

    你应该设置:

    • 顶视图优先级高于底视图的垂直内容
    • 对齐要填充的堆栈视图
    • 要填充的堆栈视图分布

    如果顶部和底部视图没有固有宽度,您还应该添加宽度约束。

    演示:

    【讨论】:

    • 谢谢!我的stackView 有一个可变的高度。没有办法用可变堆栈视图高度来做到这一点?
    • 它本身包含在一个可变高度的容器中(可以由用户调整大小)。
    • @MichaelGillen 好吧,在这个问题的上下文中,高度是动态的还是恒定的并不重要,只要它不模棱两可。粗体部分是关键。
    • 如果容器可以任意调整大小,您可能想决定当堆栈视图的宽度/高度不足以包含其内容时会发生什么。然后相应地设置两个视图的内容抗压缩优先级,但这是另一个问题。
    • @MichaelGillen 那么设置内容拥抱优先级有用吗?
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 2019-02-06
    • 2018-12-01
    • 1970-01-01
    • 2017-08-10
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多