SwiftUI - Як змінити колір тла подання?


Відповіді:


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()інакше, це зупиниться на безпечних полях.

Використання модифікатора накладання

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?
аталаяса,

3
Однак це спрацює, якщо у вас є NavigationView, а список чи прокрутка перегляду заголовка панелі навігації не
Richard Witherspoon

2
Я просто спробував обидва без удачі. Я намагався знайти спосіб отримати колір фону екрану, працюючи з навігацією Перегляд і прокрутка
Річард Уізерспун

1
Привіт @Ryan, я оновив свої рішення, щоб перейти .edgesIgnoringSafeArea(.all)до кольору, а не до будь-якого іншого вмісту. Це має працювати краще для вас.
Mark Moeykens

1
Що стосується NavigationView, використовуйте метод ZStack вище, просто всередині NavigationView, як показано тут: stackoverflow.com/a/58230473/457478
Райан,

130

Ви можете зробити щось на зразок:

.background(Color.black)

навколо вашого зору.

напр. із шаблону за замовчуванням (я охоплюю його навколо групи):

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

Щоб додати до нього деяку непрозорість, ви також можете додати .opacityметод:

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

Ви можете також використовувати Оглядати елемент зору на CMD + клацання на View і натиснувши Show SwiftUI Inspector> Background> Ваш колір

Оглянути вигляд

Огляньте детальний вигляд


4
Я не міг використовувати його для перегляду навігації. Ви уявляєте, що робити з переглядом навігації?
аталаяса

Яку версію ви використовуєте?
juniorRubyist

atalayasa, UINavigationBar.appearance (). backgroundColor = .black
Кугуцумен

Коли я роблю це за допомогою Rectangle (), у мене виходить чорна область.
Кріс Принс


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 на висоту екрана.
Марк Мойкенс

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

Код делегата сцени в інтерфейсі Swift

Колір фону перегляду вмісту

window.rootViewController? .view.backgroundColor = .lightGray

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.