问题
I'm beginning to try out SwiftUI
and I'm surprised that it doesn't seem to be straightforward to change the background color of a View
. How do you do this using SwiftUI
?
回答1:
You can do something like:
.background(Color.black)
around your view.
eg. from the default template (I am encompassing it around a Group):
var body: some View {
VStack {
Text("Hello SwiftUI!")
}
.background(Color.black)
}
To add some opacity to it, you can add the .opacity
method as well:
.background(Color.black.opacity(0.5))
You can also make use of the inspect element of the view by CMD + click on the View and clicking Show SwiftUI Inspector
> Background
> Your Color
回答2:
Screen's Background Color
(As of Xcode Version 11.1 (11A1027)
I'm not sure if the original poster meant the background color of the entire screen or of individual views. So I'll just add this answer which is to set the entire screen's background color.
Using ZStack
var body: some View {
ZStack
{
Color.purple
.edgesIgnoringSafeArea(.all)
// Your other content here
// Other layers will respect the safe area edges
}
}
I added .edgesIgnoringSafeArea(.all)
otherwise, it will stop at safe area margins.
Using Overlay Modifier
var body: some View {
Color.purple
.edgesIgnoringSafeArea(.vertical) // Ignore just for the color
.overlay(
VStack(spacing: 20) {
Text("Overlay").font(.largeTitle)
Text("Example").font(.title).foregroundColor(.white)
})
}
Note: It's important to keep the .edgesIgnoringSafeArea
on just the color so your main content isn't ignoring the safe area edges too.
回答3:
like this
struct ContentView : View {
@State var fullName: String = "yushuyi"
var body: some View {
VStack
{
TextField($fullName).background(SwiftUI.Color.red)
Spacer()
}.background(SwiftUI.Color.yellow.edgesIgnoringSafeArea(.all))
}
}
回答4:
Would this solution work?:
add following line to SceneDelegate: window.rootViewController?.view.backgroundColor = .black
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
window.rootViewController?.view.backgroundColor = .black
}
回答5:
Several possibilities : (SwiftUI / Xcode 11)
1 .background(Color.black) //for system colors
2 .background(Color("green")) //for colors you created in Assets.xcassets
- Otherwise you can do Command+Click on the element and change it from there.
Hope it help :)
回答6:
For List
:
All SwiftUI's List
s are backed by a UITableView
in iOS. so you need to change the background color of the tableView. But since Color
and UIColor
values are slightly different, you can get rid of the UIColor
.
struct ContentView : View {
init(){
UITableView.appearance().backgroundColor = .clear
}
var body: some View {
List {
Section(header: Text("First Section")) {
Text("First Cell")
}
Section(header: Text("Second Section")) {
Text("First Cell")
}
}
.background(Color.yellow)
}
}
Now you can use Any background (including all Color
s) you want
Also First look at this result:
As you can see, you can set the color of each element in the View hierarchy like this:
struct ContentView: View {
init(){
UINavigationBar.appearance().backgroundColor = .green
//For other NavigationBar changes, look here:(https://stackoverflow.com/a/57509555/5623035)
}
var body: some View {
ZStack {
Color.yellow
NavigationView {
ZStack {
Color.blue
Text("Some text")
}
}.background(Color.red)
}
}
}
And the first one is window
:
window.backgroundColor = .magenta
The very common issue is we can not remove the background color of SwiftUI's HostingViewController
(yet), so we can't see some of the views like navigationView
through the views hierarchy. You should wait for the API or try to fake those views (not recommended).
来源:https://stackoverflow.com/questions/56437036/swiftui-how-do-i-change-the-background-color-of-a-view