Ich fange an zu probieren SwiftUI
und bin überrascht, dass es nicht einfach zu sein scheint, die Hintergrundfarbe von a zu ändern View
. Wie machst du das mit SwiftUI
?
Ich fange an zu probieren SwiftUI
und bin überrascht, dass es nicht einfach zu sein scheint, die Hintergrundfarbe von a zu ändern View
. Wie machst du das mit SwiftUI
?
Antworten:
Sie können so etwas tun wie:
.background(Color.black)
um deine Sicht.
z.B. aus der Standardvorlage (ich umfasse sie um eine Gruppe):
var body: some View {
VStack {
Text("Hello SwiftUI!")
}
.background(Color.black)
}
Um etwas Deckkraft hinzuzufügen, können Sie auch die .opacity
Methode hinzufügen :
.background(Color.black.opacity(0.5))
Sie können auch Gebrauch machen von der Einsicht Element der Ansicht von CMD + Klick auf die Ansicht und klicken machen Show SwiftUI Inspector
> Background
> Ihre Farbe
(Ab Xcode Version 12)
Ich bin mir nicht sicher, ob das Originalplakat die Hintergrundfarbe des gesamten Bildschirms oder einzelner Ansichten bedeutet. Also füge ich einfach diese Antwort hinzu, um die Hintergrundfarbe des gesamten Bildschirms festzulegen.
var body: some View {
ZStack
{
Color.purple
.ignoresSafeArea()
// Your other content here
// Other layers will respect the safe area edges
}
}
Ich habe .ignoresSafeArea()
sonst hinzugefügt , es wird an sicheren Bereichsrändern anhalten.
var body: some View {
Color.purple
.ignoresSafeArea(.vertical) // Ignore just for the color
.overlay(
VStack(spacing: 20) {
Text("Overlay").font(.largeTitle)
Text("Example").font(.title).foregroundColor(.white)
})
}
Hinweis: Es ist wichtig , das zu halten , .ignoresSafeArea
auf nur die Farbe , damit Ihr Hauptinhalt ist die sicheren Bereich Kanten nicht zu ignorieren.
.edgesIgnoringSafeArea(.all)
nur die Farbe und nicht den anderen Inhalt zu verwenden. Dies sollte für Sie besser funktionieren.
Füllen Sie den gesamten Bildschirm aus
var body : some View{
Color.green.edgesIgnoringSafeArea(.all)
}
so was
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))
}
}
.edgesIgnoringSafeArea()
die Hintergrundfarbe hinzufügen müssen . Von UIKit zu kommen ist bizarr, aber es funktioniert!
Spacer()
VStack auf die Höhe des Bildschirms geschoben wird.
List
:Alle SwiftUIs List
werden von einem UITableView
in iOS unterstützt. Sie müssen also die Hintergrundfarbe der tableView ändern . Aber da Color
und UIColor
Werte etwas unterschiedlich sind, können Sie die loswerden 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)
}
}
Jetzt können Sie einen beliebigen Hintergrund (einschließlich aller Color
s) verwenden
Schauen Sie sich auch zuerst dieses Ergebnis an:
Wie Sie sehen können, können Sie die Farbe jedes Elements in der Ansichtshierarchie wie folgt festlegen:
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)
}
}
}
Und der erste ist window
:
window.backgroundColor = .magenta
Das häufigste Problem ist, dass wir die Hintergrundfarbe von SwiftUIs HostingViewController
(noch) nicht entfernen können , sodass wir einige der Ansichten nicht wie navigationView
in der Ansichtshierarchie sehen können. Sie sollten auf die API warten oder versuchen, diese Ansichten zu fälschen ( nicht empfohlen ).
ListCoreCellHost
, die weiß bleibt. pasteboard.co/JeWCgMV.png
UITableViewCell.appearance().backgroundColor = .clear
. :)
Würde diese Lösung funktionieren?:
Fügen Sie SceneDelegate die folgende Zeile hinzu: 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
}
Mehrere Möglichkeiten: (SwiftUI / Xcode 11)
1 .background(Color.black) //for system colors
2 .background(Color("green")) //for colors you created in Assets.xcassets
Hoffe es hilft :)
Ich möchte einen Modifikator zum Ändern der Hintergrundfarbe einer Ansicht deklarieren.
extension View {
func background(with color: Color) -> some View {
background(GeometryReader { geometry in
Rectangle().path(in: geometry.frame(in: .local)).foregroundColor(color)
})
}
}
Dann benutze ich den Modifikator, indem ich eine Farbe an eine Ansicht übergebe.
struct Content: View {
var body: some View {
Text("Foreground Label").foregroundColor(.green).background(with: .black)
}
}
Sie können einfach die Hintergrundfarbe einer Ansicht ändern:
var body : some View{
VStack{
Color.blue.edgesIgnoringSafeArea(.all)
}
}
und Sie können auch ZStack verwenden:
var body : some View{
ZStack{
Color.blue.edgesIgnoringSafeArea(.all)
}
}
Xcode 11.5
Verwenden Sie einfach ZStack, um Ihrer Hauptansicht in SwiftUI Hintergrundfarben oder Bilder hinzuzufügen
struct ContentView: View {
var body: some View {
ZStack {
Color.black
}
.edgesIgnoringSafeArea(.vertical)
}
}
Verwenden Sie den folgenden Code für die Farbanpassung der Navigationsleiste
struct ContentView: View {
@State var msg = "Hello SwiftUI😊"
init() {
UINavigationBar.appearance().backgroundColor = .systemPink
UINavigationBar.appearance().largeTitleTextAttributes = [
.foregroundColor: UIColor.white,
.font : UIFont(name:"Helvetica Neue", size: 40)!]
// 3.
UINavigationBar.appearance().titleTextAttributes = [
.font : UIFont(name: "HelveticaNeue-Thin", size: 20)!]
}
var body: some View {
NavigationView {
Text(msg)
.navigationBarTitle(Text("NAVIGATION BAR"))
}
}
}
var body: some View {
var body: some View {
NavigationView {
ZStack {
// Background
Color.blue.edgesIgnoringSafeArea(.all)
content
}
//.navigationTitle(Constants.navigationTitle)
//.navigationBarItems(leading: cancelButton, trailing: doneButton)
//.navigationViewStyle(StackNavigationViewStyle())
}
}
}
var content: some View {
// your content here; List, VStack etc - whatever you want
VStack {
Text("Hello World")
}
}