【问题标题】:Change UIView background color in SwiftUI在 SwiftUI 中更改 UIView 背景颜色
【发布时间】:2019-09-06 16:32:24
【问题描述】:

大家好。我正在使用 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)
    }
}

【问题讨论】:

  • 创建另一个与您尝试设置背景颜色的视图大小相同的图层。然后确保新图层位于其他对象的后面,并在新视图上设置颜色。
  • 只是好奇,为什么ZStack 不适合你?不会在两者上都设置背景吗?

标签: ios swift swiftui


【解决方案1】:

希望这有助于理解:

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

另一个如果你使用组中的视图

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

【讨论】:

  • 我需要一个不使用 .edgesIgnoringSafeArea 的解决方案,因为这似乎会导致问题进一步下降。
  • @Ryan 你找到解决方案了吗?
  • var body: some View { ZStack { Color.purple.edgesIgnoringSafeArea(.vertical) VStack { ... } } 应该可以正常工作而不会导致堆栈出现问题
  • OP 专门要求提供不使用覆盖的解决方案
【解决方案2】:

为了改变背景颜色,我认为目前大多数人和我自己使用的方法使用 ZStack。我还没有看到将 UIViewRepresentable 放在上面的问题。

var body: some View {
    ZStack {
        Color.blue
            .edgesIgnoringSafeArea(.all)
        VStack {
          Text("Hello World!")
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2020-11-01
    • 2020-10-11
    • 2014-09-25
    • 2021-07-25
    • 2020-03-02
    相关资源
    最近更新 更多