【问题标题】:Getting VStack to shrink to minWidth when containing Text SwiftUI包含 Text SwiftUI 时让 VStack 缩小到 minWidth
【发布时间】:2021-05-24 09:23:02
【问题描述】:

我对 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)
                
        )
    }
}

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

因此,似乎将框架放在背景周围只会使最小/最大影响该背景视图。 如果我然后尝试将框架放在 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 的正确方法?

谢谢!

【问题讨论】:

    标签: swiftui frame vstack


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多