SwiftUI - ฉันจะเปลี่ยนสีพื้นหลังของ View ได้อย่างไร?


คำตอบ:


134

สีพื้นหลังของหน้าจอ

(ณ Xcode เวอร์ชัน 12)

ฉันไม่แน่ใจว่าโปสเตอร์ต้นฉบับหมายถึงสีพื้นหลังของทั้งหน้าจอหรือของแต่ละมุมมอง ผมจะเพิ่มคำตอบนี้เพื่อกำหนดสีพื้นหลังของหน้าจอทั้งหมด

ใช้ ZStack

var body: some View {
    ZStack
        {
            Color.purple
                .ignoresSafeArea()
            
            // Your other content here
            // Other layers will respect the safe area edges
    }
}

ฉันเพิ่ม.ignoresSafeArea()ไม่เช่นนั้นมันจะหยุดที่ระยะขอบของพื้นที่ปลอดภัย

ใช้ Overlay Modifier

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

หมายเหตุ: มันเป็นสิ่งสำคัญที่จะเก็บ.ignoresSafeAreaในเพียงสีเพื่อให้เนื้อหาหลักของคุณไม่ได้ละเลยพื้นที่ปลอดภัยขอบเกินไป


6
คุณรู้วิธีเปลี่ยนสีพื้นหลังสำหรับ NavigationView หรือไม่?
atalayasa

3
อย่างไรก็ตามสิ่งนี้จะใช้งานได้หากคุณมี NavigationView และรายการหรือ scrollview ชื่อแถบนำทางจะไม่ยุบ
Richard Witherspoon

2
ฉันเพิ่งลองทั้งสองโดยไม่มีโชค ฉันพยายามหาวิธีทำให้สีพื้นหลังของหน้าจอทำงานร่วมกับการนำทางดูและมุมมองแบบเลื่อน
Richard Witherspoon

1
เฮ้ @Ryan ฉันอัปเดตโซลูชันของฉันเพื่อเปลี่ยน.edgesIgnoringSafeArea(.all)เป็นแค่สีไม่ใช่เนื้อหาอื่น สิ่งนี้ควรได้ผลดีกว่าสำหรับคุณ
Mark Moeykens

1
เกี่ยวกับ NavigationView ให้ใช้วิธี ZStack ด้านบนภายใน NavigationView ดังที่แสดงไว้ที่นี่: stackoverflow.com/a/58230473/457478
Ryan

130

คุณสามารถทำสิ่งต่างๆเช่น:

.background(Color.black)

รอบ ๆ มุมมองของคุณ

เช่น. จากเทมเพลตเริ่มต้น (ฉันรวมไว้รอบ ๆ กลุ่ม):

    var body: some View {
        VStack {
          Text("Hello SwiftUI!")
        }
       .background(Color.black)
    }

หากต้องการเพิ่มความทึบคุณสามารถเพิ่ม.opacityวิธีการได้เช่นกัน:

.background(Color.black.opacity(0.5))

คุณยังสามารถใช้ประโยชน์จากองค์ประกอบการตรวจสอบของมุมมองโดย CMD + คลิกที่มุมมองและคลิกShow SwiftUI Inspector>> Backgroundสีของคุณ

ตรวจสอบมุมมอง

ตรวจสอบมุมมองรายละเอียด


4
ฉันไม่สามารถใช้สำหรับมุมมองการนำทางได้คุณมีความคิดว่าจะทำอย่างไรกับมุมมองการนำทาง?
atalayasa

คุณใช้เวอร์ชันอะไร
juniorRubyist

atalayasa, UINavigationBar.appearance (). backgroundColor =
.black

เมื่อฉันทำสิ่งนี้โดยใช้ Rectangle () ฉันจะได้พื้นที่ที่เต็มไปด้วยสีดำ
Chris Prince


15

แบบนี้

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

1
โปรดทราบว่าคุณจะต้องเพิ่ม.edgesIgnoringSafeArea()ให้กับสีพื้นหลัง มาจาก UIKit นี่แปลก แต่ได้ผล!
mbxDev

1
หมายเหตุ: ใช้งานได้เนื่องจากSpacer()กำลังผลัก VStack ไปที่ความสูงของหน้าจอ
Mark Moeykens

9

สำหรับList:

SwiftUI ทั้งหมดListได้รับการสนับสนุนโดยUITableViewใน iOS ดังนั้นคุณจึงจำเป็นต้องเปลี่ยนสีพื้นหลังของtableView แต่เนื่องจากColorและUIColorค่าแตกต่างกันเล็กน้อยคุณจึงสามารถกำจัดไฟล์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)
    }
}

ตอนนี้คุณสามารถใช้พื้นหลังใดก็ได้ (รวมถึงทั้งหมดColor) ที่คุณต้องการ


ก่อนอื่นดูที่ผลลัพธ์นี้:

ดูลำดับชั้น

อย่างที่คุณเห็นคุณสามารถกำหนดสีของแต่ละองค์ประกอบในลำดับชั้นของมุมมองดังนี้:

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

และคนแรกคือwindow:

window.backgroundColor = .magenta

ปัญหาที่พบบ่อยมากคือเราไม่สามารถลบสีพื้นหลังของ SwiftUI ได้HostingViewController(ยัง) ดังนั้นเราจึงไม่เห็นบางมุมมองเช่นnavigationViewผ่านลำดับชั้นของมุมมอง คุณควรรอ API หรือพยายามปลอมมุมมองเหล่านั้น ( ไม่แนะนำ )


คำถามที่คล้ายกันแทนที่จะตั้งค่าสีในแถวรายการฉันจะทำให้โปร่งใสได้อย่างไรดูเหมือนว่าความพยายามทั้งหมดของฉันจะไม่สามารถเปิดเผยสีพื้นฐานและแถวจะยังคงเป็นสีขาวโดยเฉพาะอย่างยิ่งListCoreCellHostสิ่งที่ยังคงเป็นสีขาว pasteboard.co/JeWCgMV.png
tGilani

โอเคฉันคิดว่า 15 นาทีต่อมาโพสต์ที่นี่ต้องตั้งค่าUITableViewCell.appearance().backgroundColor = .clearด้วย :)
tGilani

4

วิธีนี้จะได้ผลหรือไม่:

เพิ่มบรรทัดต่อไปนี้ใน 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
}

4

ความเป็นไปได้หลายประการ: (SwiftUI / Xcode 11)

1 .background(Color.black) //for system colors

2 .background(Color("green")) //for colors you created in Assets.xcassets

  1. มิฉะนั้นคุณสามารถทำCommand+ Clickกับองค์ประกอบและเปลี่ยนจากที่นั่นได้

หวังว่าจะช่วยได้ :)


3

ฉันต้องการประกาศตัวปรับแต่งสำหรับการเปลี่ยนสีพื้นหลังของมุมมอง

extension View {
  func background(with color: Color) -> some View {
    background(GeometryReader { geometry in
      Rectangle().path(in: geometry.frame(in: .local)).foregroundColor(color)
    })
  }
}

จากนั้นฉันใช้ตัวปรับแต่งโดยส่งผ่านสีไปยังมุมมอง

struct Content: View {

  var body: some View {
    Text("Foreground Label").foregroundColor(.green).background(with: .black)
  }

}

ใส่คำอธิบายภาพที่นี่


2

คุณสามารถเพียงแค่เปลี่ยนสีพื้นหลังของมุมมอง:

var body : some View{


    VStack{

        Color.blue.edgesIgnoringSafeArea(.all)

    }


}

และคุณยังสามารถใช้ ZStack:

var body : some View{


    ZStack{

        Color.blue.edgesIgnoringSafeArea(.all)

    }


}

2

ใช้โค้ดด้านล่างสำหรับการปรับแต่งสีของแถบนำทาง

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"))       
    }
    }
}

ใส่คำอธิบายภาพที่นี่


2

Xcode 11.5

เพียงใช้ ZStack เพื่อเพิ่มสีพื้นหลังหรือภาพในมุมมองหลักของคุณใน SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            Color.black
        }
        .edgesIgnoringSafeArea(.vertical)
    }
}

0

NavigationView ตัวอย่าง:

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")
    }
}

-6

รหัสบน Scene delegate ใน Swift UI

สีพื้นหลังของมุมมองเนื้อหา

window.rootViewController? .view.backgroundColor = .lightGray

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.