在 SwiftUI 中更改 UIView 背景颜色
Posted
技术标签:
【中文标题】在 SwiftUI 中更改 UIView 背景颜色【英文标题】:Change UIView background color in SwiftUI 【发布时间】: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
不适合你?不会在两者上都设置背景吗?
【参考方案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!")
【讨论】:
以上是关于在 SwiftUI 中更改 UIView 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 SwiftUI 中更改列表的背景颜色? 2020 (iOS 14)
SwiftUI 更改内联 navigationBarTitleDisplayMode 的导航栏背景颜色