0

我对 SwiftUI 还是有点陌生​​,我遇到了一个我不完全理解的奇怪案例。基本上,我有一个包含一些文本视图但也有背景视图的 VStack。理想情况下,我希望背景的宽度可以增长到一定程度。我认为这就是minWidthandmaxWidth的用途.frame()

我从这个开始,它似乎正在工作:

struct TestView: View {
    var body: some View {
        VStack {
            Text("Title")
            Text("Message")
        }
        .background(
            Rectangle()
                .foregroundColor(Color.blue)
                .frame(minWidth: 0,
                       maxWidth: 270)
                
        )
    }
}

在此处输入图像描述

到目前为止一切都很好,但是当我使文本足够大以至于需要换行时,这就是我得到的。

在此处输入图像描述

因此,似乎通过将框架放在背景周围只会使最小/最大影响该背景视图。如果我然后尝试将框架放在 VStack 周围,我会得到:

struct TestView: View {
    var body: some View {
        VStack {
            Text("Title")
            Text("Message")
        }
        .frame(minWidth: 0,
               maxWidth: 270)
        .background(
            Rectangle()
                .foregroundColor(Color.blue)

                
        )
    }
}

在此处输入图像描述

即使我不认为我有什么东西可以推出,它仍然会推出完整的 maxWidth。

我也尝试将框架移动到文本,但结果相同。什么是让具有背景的 VStack 仅随着其内容增长到 maxWidth 的正确方法?

谢谢!

4

1 回答 1

0

好吧,我很愚蠢,从字面上看,在发布后我就想起了一些关于视图上修饰符的顺序的事情。

我把框架放在背景之后,它起作用了。

struct TestView: View {
    var body: some View {
        VStack {
            Text("Title")
            Text("Message    abcdefghijklmnopqrstuvwxyz")
        }
        .background(
            Rectangle()
                .foregroundColor(Color.blue)
        )
        .frame(minWidth: 0,
               maxWidth: 270)
    }
}

在此处输入图像描述

我会把我的问题留在这里,以防它有一天会以某种方式帮助别人。

于 2021-02-22T05:48:26.573 回答