包含文本 SwiftUI

问题描述

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

中的作用

我从这个开始,它似乎有效:

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

enter image description here

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

enter image description here

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

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

                
        )
    }
}

enter image description here

即使我认为我没有将其推出,但它仍然推出了完整的 maxWidth。

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

谢谢!

解决方法

好吧,我很笨,在发布之后我就想起了一些关于 View 上修饰符的顺序如何重要的事情。

我把框架放在背景之后,效果很好。

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

enter image description here

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...