SwiftUI - Làm cách nào để thay đổi màu nền của Chế độ xem?


115

Tôi đang bắt đầu dùng thử SwiftUIvà tôi ngạc nhiên rằng việc thay đổi màu nền của a có vẻ không đơn giản View. Làm thế nào để bạn làm điều này bằng cách sử dụng SwiftUI?

Câu trả lời:


120

Bạn có thể làm điều gì đó như:

.background(Color.black)

xung quanh tầm nhìn của bạn.

ví dụ. từ mẫu mặc định (tôi đang bao gồm nó xung quanh một Nhóm):

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

Để thêm một số độ mờ cho nó, bạn cũng có thể thêm .opacityphương thức:

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

Bạn cũng có thể sử dụng phần tử kiểm tra của chế độ xem bằng CMD + nhấp vào Chế độ xem và nhấp vào Show SwiftUI Inspector>> BackgroundMàu của bạn

Kiểm tra chế độ xem

Kiểm tra Chế độ xem chi tiết


4
Tôi không thể sử dụng nó cho chế độ xem điều hướng, bạn có biết phải làm gì với chế độ xem điều hướng không?
atalayasa

Phiên bản nào bạn đang sử dụng?
juniorRubyist vào

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

Khi tôi làm điều này bằng cách sử dụng Rectangle (), tôi kết thúc với một vùng được tô màu đen.
Chris Prince,

116

Màu nền của màn hình

(Kể từ phiên bản Xcode 12)

Tôi không chắc liệu áp phích gốc có nghĩa là màu nền của toàn bộ màn hình hay của từng chế độ xem. Vì vậy, tôi sẽ chỉ thêm câu trả lời này là đặt màu nền của toàn bộ màn hình.

Sử dụng ZStack

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

Tôi nói thêm .ignoresSafeArea()nếu không, nó sẽ dừng lại ở biên vùng an toàn.

Sử dụng công cụ sửa đổi lớp phủ

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

Lưu ý: Điều quan trọng là để giữ .ignoresSafeAreatrên chỉ là màu sắc vì vậy nội dung chính của bạn không được bỏ qua các cạnh khu vực an toàn quá.


6
Bạn có biết cách thay đổi màu nền cho NavigationView không?
atalayasa

3
Điều này sẽ làm việc tuy nhiên nếu bạn có một NavigationView và một danh sách hoặc scrollview danh hiệu thanh điều hướng sẽ không sụp đổ
Richard Witherspoon

2
Tôi chỉ thử cả hai mà không có may mắn. Ive đã cố gắng để tìm ra một cách để có được những nền màn hình làm việc màu sắc với một navigationView và scrollview
Richard Witherspoon

1
Xin chào @Ryan, tôi đã cập nhật các giải pháp của mình để chỉ chuyển .edgesIgnoringSafeArea(.all)sang màu sắc chứ không phải bất kỳ nội dung nào khác. Điều này sẽ hoạt động tốt hơn cho bạn.
Mark Moeykens

1
Về NavigationView, sử dụng phương pháp ZStack trên chỉ bên trong NavigationView như ở đây: stackoverflow.com/a/58230473/457478
Ryan

18

Lấp đầy toàn bộ màn hình

var body : some View{
    Color.green.edgesIgnoringSafeArea(.all)
}

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


15

như thế này

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
Lưu ý rằng bạn cần thêm .edgesIgnoringSafeArea()vào màu nền . Đến từ UIKit, điều này thật kỳ lạ, nhưng nó hoạt động!
mbxDev

1
Lưu ý: Điều này hoạt động vì Spacer()đang đẩy VStack đến chiều cao của màn hình.
Mark Moeykens

9

Đối với List:

Tất cả các SwiftUI Listđược hỗ trợ bởi một UITableViewtrong iOS. vì vậy bạn cần thay đổi màu nền của tableView . Nhưng vì ColorUIColorcác giá trị hơi khác nhau, bạn có thể loại bỏ 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)
    }
}

Bây giờ bạn có thể sử dụng Bất kỳ nền nào (bao gồm tất cả Color) bạn muốn


Ngoài ra Đầu tiên hãy nhìn vào kết quả này:

Xem hệ thống phân cấp

Như bạn thấy, bạn có thể đặt màu của từng phần tử trong phân cấp Chế độ xem như sau:

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

Và điều đầu tiên là window:

window.backgroundColor = .magenta

Vấn đề rất phổ biến là chúng tôi không thể xóa màu nền của SwiftUI HostingViewController(chưa), vì vậy chúng tôi không thể nhìn thấy một số chế độ xem như navigationViewthông qua hệ thống phân cấp chế độ xem. Bạn nên đợi API hoặc cố gắng giả mạo các chế độ xem đó ( không được khuyến nghị ).


một câu hỏi tương tự, thay vì đặt màu trên hàng Danh sách, làm thế nào tôi có thể làm cho nó trong suốt, có vẻ như mọi nỗ lực của tôi đều không thể hiện được màu bên dưới và các hàng vẫn trắng, đặc biệt, có hàng ListCoreCellHostvẫn trắng. pasteboard.co/JeWCgMV.png
tGilani

Được rồi, tôi nghĩ rằng 15 phút sau, tôi sẽ đăng ở đây, cũng phải thiết lập UITableViewCell.appearance().backgroundColor = .clear. :)
tGilani

4

Giải pháp này có hoạt động không ?:

thêm dòng sau vào 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

Một số khả năng: (SwiftUI / Xcode 11)

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

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

  1. Nếu không, bạn có thể thực hiện Command+ Clicktrên phần tử và thay đổi nó từ đó.

Hy vọng nó sẽ giúp :)


3

Tôi muốn khai báo một công cụ sửa đổi để thay đổi màu nền của một dạng xem.

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

Sau đó, tôi sử dụng công cụ sửa đổi bằng cách chuyển màu cho một chế độ xem.

struct Content: View {

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

}

nhập mô tả hình ảnh ở đây


2

Bạn có thể Chỉ cần Thay đổi Màu Nền của Chế độ xem:

var body : some View{


    VStack{

        Color.blue.edgesIgnoringSafeArea(.all)

    }


}

và Bạn cũng có thể sử dụng ZStack:

var body : some View{


    ZStack{

        Color.blue.edgesIgnoringSafeArea(.all)

    }


}

2

Xcode 11.5

Chỉ cần sử dụng ZStack để thêm màu nền hoặc hình ảnh vào chế độ xem chính của bạn trong SwiftUI

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

1

Sử dụng mã bên dưới để tùy chỉnh màu thanh điều hướng

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

nhập mô tả hình ảnh ở đây


0

Ví dụ về 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

Mã trên đại biểu Scene trong Swift UI

Màu nền của chế độ xem nội dung

window.rootViewController? .view.backgroundColor = .lightGray

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.