【问题标题】:Why my custom views try to take all the available vertical space in VStack?为什么我的自定义视图试图占用 VStack 中所有可用的垂直空间?
【发布时间】:2021-08-24 16:03:37
【问题描述】:

我是 SwiftUI 的新手,遇到了一个非常令人不安的问题。

我创建了一些自定义视图,这些视图在预览中以正确的高度显示。当我尝试将它们添加到 VStack 中时,它们的行为就像我设置的 .frame(minHeight: 0, maxHeight: .infinity) 一样。在自定义视图后添加Spacer(),在VStack 内,不能解决问题。

我事先不知道这些视图的大小,所以我无法设置固定的帧大小,我能做些什么来防止这种行为吗?我什至考虑过计算它们的内容大小并相应地应用固定大小,但这听起来像是开发者的噩梦:|

感谢阅读,感谢您的帮助!

编辑:引发问题的最简单代码:

VStack {
  ChipGroup(chips: [
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip"),
    Chip(titleKey: "Chip")
  ])
  Spacer()
}

Chip & ChipGroup 基于以下教程:https://prafullkumar77.medium.com/swiftui-building-chips-with-autolayout-container-dbca53bbb848

【问题讨论】:

  • 显示你的代码。

标签: ios swift swiftui


【解决方案1】:

GeometryReader 是您的 ChipGroup 的根视图。 GeometryReader 总是占用尽可能多的空间,尽可能地扩展。

如果您不希望视图占用所有空间,则需要摆脱 GeometryReader - 除非您想设置固定高度,您特别提到您希望避免这种情况。这就是 GeometryReader 的工作原理。

【讨论】:

  • 你说得对,我已经从视图中删除了 GeometryReader,现在它工作得很好,非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多