SwiftUI - Color的行为不同,如果我使用ScrollView而不是VStack



使用下面的代码:

struct ContentView: View {
  var body: some View {
        ScrollView(.vertical) { Color.red }
    }
}

Color只有10个点的高度,但是使用下面的代码:

struct ContentView: View {
    var body: some View {
        VStack { Color.red }
    }
}

颜色填充了所有可用的空间(本例使用了VStack,但我可以使用一个GeometryReader或只是颜色本身)。

我希望颜色填充整个屏幕在这两个例子中,我不知道发生了什么当我使用ScrollView,如果我使用这样的边界修改器:

struct ContentView: View {
    var body: some View {
        ScrollView(.vertical) { Color.red }
.border(.yellow)
    }
}

它在整个安全区域周围画了一个边界,这意味着ScrollView的大小,为什么颜色不也变成那样的大小呢?

只是为了澄清我不是试图应用背景到ScrollView,我显然可以提供一个框架Color填充一个特定的大小,我只是好奇,因为ScrollView打破了我对SwiftUI的理解,有时它的行为不像我期望的,这是一个例子。

  • 一些视图扩展以匹配它们的父视图(如几何阅读器)

  • 一些视图扩展以匹配其内容(如文本和颜色)

  • 一些视图会缩小以适应它们的子视图(比如堆栈)

根据这些的组合,您将得到不同的行为,

因此,当您将Color放入无限父级(如scrollView)时,它无法检测大小并按您的预期增长,您应该使用scrollViewBackground修饰符。

但是当你在堆栈中使用Color时,所有的大小都是预先定义的。

最新更新