3

我有一个VStack3Text秒。每个都有不同长度的字符串。我希望VStack' 的宽度足够大以适合最宽的Text,但我也希望所有三个Texts 水平填充 VStack 。

默认情况下,使用以下代码:

VStack(spacing: 4.0) {
    ForEach(1..<4) {
        Text(Array<String>(repeating: "word", count: $0).joined(separator: " "))
            .background(Color.gray)
    }
}

我得到:

具有三种不同宽度文本的 VStack

我想:

具有三个相同宽度文本的 VStack

在 UIKit 中,我可以使用UIStackView属性alignment设置为.fill. VStack没有.fill对齐。我看到的建议解决方案是使用 for 修改堆栈视图的每个子项(即 each )Text的框架。.infinitymaxWidth

我发现的建议是用 s 修改Texts .frame(maxWidth: .infinity)。然而,这使得整体VStack扩展到(大概)它的最大尺寸:

宽 VStack

有没有办法让它VStack自然地长到它最宽的孩子的大小,而不是更大,同时让它所有的孩子都一样宽?

4

1 回答 1

4

只需添加.fixedSize().

struct ContentView: View {
    var body: some View {
    
        VStack(spacing: 4.0) {
            ForEach(1..<4) {
                Text(Array<String>(repeating: "word", count: $0).joined(separator: " "))
                    .frame(maxWidth: .infinity) /// keep the maxWidth
                    .background(Color.gray)
            }
        }
        .fixedSize() /// here!
    }
}

结果:

3 个带有灰色背景的文本垂直堆叠,所有 3 个灰色背景都具有最大的文本宽度

于 2021-04-27T21:17:41.667 回答