在 SwiftUI 中更改 UIView 背景颜色

iAl*_*x11 5 ios swift swiftui

大家好。我正在使用 SwiftUI 创建一个简单的 iOS 应用程序,我想将视图的背景颜色更改为我拥有的自定义背景颜色。

这是非常容易做到的事情,但如果不使用 ZStacks 或类似的解决方法,似乎在 SwiftUI 中是不可能实现的,例如,如果您使用 List,则无法实现。

我想更改视图的颜色,而不是使用带有自定义颜色的 ZStack,然后将其余的视图放在它上面。我UIView.appearance().backgroundColor = color在初始化我的视图时尝试使用,但随后所有视图都被隐藏并且屏幕填充了所选的颜色。

由于我不擅长解释,这里有一些描述问题的图像:

无颜色变化 无颜色变化

随着颜色变化 随着颜色变化

我的代码

import SwiftUI

struct TabController: View {
    @State private var selection = 0

    init() {
        UIView.appearance().backgroundColor = UIColor(named: "backgroundColor")
    }

    var body: some View {
        TabView(selection: $selection) {
            HomePageView()
                .tabItem {
                    Image(systemName: "house.fill")
                        .font(.title)
                }
                .tag(0)

            Text("Second View")
                .font(.title)
                .tabItem {
                    Image(systemName: "bell.fill")
                        .font(.title)
                }
                .tag(1)
        }.edgesIgnoringSafeArea(.top)
    }
}
Run Code Online (Sandbox Code Playgroud)

Fay*_*med 9

希望这有助于理解:

var body: some View {
    Color.purple
        .overlay(
            VStack(spacing: 20) {
                Text("Overlay").font(.largeTitle)
                Text("Example").font(.title).foregroundColor(.white)
        })
        .edgesIgnoringSafeArea(.vertical)
}
Run Code Online (Sandbox Code Playgroud)

另一个如果您使用 Group 中的视图

var body: some View {
        Group {
          Text("Hello SwiftUI!")
        }
       .background(Color.black)
    }
Run Code Online (Sandbox Code Playgroud)

  • 我需要一个不使用 .edgesIgnoringSafeArea 的解决方案,因为这似乎会导致堆栈进一步出现问题。 (3认同)