我想更改表单的“浅灰色”背景色,但是.foregroundColor(Color.blue)
和.background(Color.blue)
似乎不起作用
struct ContentView : View {
@State var value = ""
var body: some View {
Form {
Section(header: Text("First Name")) {
TextField($value)
}
Section(header: Text("Last Name")) {
TextField($value)
}
}.foregroundColor(Color.blue)
}
}
答案 0 :(得分:5)
在iOS中,所有SwiftUI的List
都由UITableView
支持。因此您需要更改 tableView 的背景颜色。但是,由于Color
和UIColor
的值略有不同,因此您可以摆脱UIColor
。
struct ContentView: View {
init(){
UITableView.appearance().backgroundColor = .clear
}
@State var value = ""
var body: some View {
Form {
Section(header: Text("First Name")) {
TextField("First Name", text: $value)
}
Section(header: Text("Last Name")) {
TextField("Last Name", text: $value)
}
}
.foregroundColor(Color.blue)
.background(Color.yellow)
}
}
现在,您可以使用任何背景(包括所有Color
)
请注意,这些顶部和底部白色区域是安全区域,您可以使用.edgesIgnoringSafeArea()
修饰符删除它们。
答案 1 :(得分:0)
上面的Mojtaba Hosseini接受的答案有效,但是init()语句不是UITableView
语句的好地方。这是因为它“硬编码” ContentView的init参数。在这种情况下,它什么也没有,所以一切正常,但是如果将@ObservedObject
添加到视图中,则会破坏init函数。
将UITable语句添加到body
,显式返回Form
并删除init()
更加简单。
var body: some View {
UITableView.appearance().backgroundColor = .clear
return Form {...}
}
但是,在Form
上设置背景颜色通常可以正常工作。它在ContentView
屏幕上不起作用的事实可能是一个错误。
答案 2 :(得分:0)
尝试
.onAppear {
UITableView.appearance().backgroundColor = .blue
}
答案 3 :(得分:0)
如果您不想修改Form
的安全区域,也可以使用ZStack
:
struct ContentView: View {
init(){
UITableView.appearance().backgroundColor = .clear
}
@State var value = ""
var body: some View {
ZStack {
Color(UIColor.systemYellow)
.edgesIgnoringSafeArea(.all)
Form {
Section(header: Text("First Name")) {
TextField("First Name", text: $value)
}
Section(header: Text("Last Name")) {
TextField("Last Name", text: $value)
}
}
}
}
}
答案 4 :(得分:0)
上面的解决方案对于我要实现的目标并没有真正起作用。我希望表单的初始屏幕背景清晰,而随后的屏幕具有默认的iOS systemGroupedBackground颜色。对我而言,使用appear()和desire()无效,因为在各个选项卡之间切换会导致外观错误。
我想出了以下解决方案。它借鉴了上述解决方案。
对于ContentView屏幕,我将这段代码插入到Struct内。
init(){
UITableView.appearance().backgroundColor = .clear
}
这是一个影响所有表格的全局更改。
对于希望使用默认颜色的所有表单,我将这段代码插入了表单{}之外。
.background(Color(.systemGroupedBackground))