如何在swiftUI中为viewController设置背景颜色?

时间:2019-06-19 10:05:40

标签: ios swiftui xcode11

我一直试图在swiftUI中为整个viewController设置背景色,但我无法。该视图不具有属性.backgroundColor

我也尝试过将.backgroundColor中的viewController的{​​{1}}属性也使用,并且它没有采用该属性,但是却采用了sceneDelegate属性。

5 个答案:

答案 0 :(得分:2)

到目前为止,我发现最有效的方法是在ContentView主体的顶部创建一个ZStack,并在第一层使用Color来忽略安全区域。苹果将​​Color定义为“后期绑定令牌”,无论如何,但其行为与任何其他View相似。

struct ContentView: View {
  var body: some View {
    ZStack {
      Color.red
      .edgesIgnoringSafeArea(.all)

      /// Your Inner View content goes here.
      VStack {
        Text("Hello") 
      } // VStack

    } // ZStack
  } // body View
}  // ContentView

注意:请注意内部视图中的内容,因为它很容易扩展以填充整个窗口,从而用白色等覆盖您的背景颜色。例如,流行的 NavigationView 倾向于扩展到整个窗口,对我而言,它倾向于忽略其记录的.background()设置。您也可以在此处执行相同的ZStack策略。

NavigationView {
  ZStack { 
    Color.red.edgesIgnoringSafeArea(.all) 
    VStack {
      Text("Hello")
    } // VStack
  } // ZStack
}  // NavigationView

答案 1 :(得分:0)

尝试使用.background(Color.red)

答案 2 :(得分:0)

如果在顶视图上使用背景修饰符(.background(Color.red)),您将用新视图包装该视图,并在其填充或大小周围添加红色背景色。 因此,您应该使用Rectangle()视图和Z堆栈来为整个视图设置完整的背景,如果需要,请使用.edgesIgnoringSafeArea

    NavigationView {
        ZStack { 
            Rectangle().foregroundColor(.blue).edgesIgnoringSafeArea(.all)
            ScrollView {
                List()
                    ForEach(modelExampleList) { modelExample in
                        Row(model: modelExample)
                    }
                }.frame(height: 200)
            }.padding(.leading, 10)
        }.navigationBarTitle(Text("ModelExample List"), displayMode: .large)
    }

答案 3 :(得分:0)

您可以使用以下代码更改整个视图控制器的颜色

ZStack {
        Color.red
        .edgesIgnoringSafeArea(.all)
    }

并使用此代码更改安全区域的背景颜色

ZStack {
        Color.red
    }

答案 4 :(得分:0)

我将它从 ZStack 中移出,然后使用了 overlay 并且它起作用了。

var body: some View {
    NavigationView {
        sceneBackgroundColor
            .edgesIgnoringSafeArea(.all)
            .overlay(myView)
    }
}