我想更改窗体的“浅灰色”背景色,但.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)
}
}
8条答案
按热度按时间xam8gpfp1#
iOS 16操作系统
通过将以下修改器应用于
Form
,可以隐藏默认背景以显示底层视图:iOS 13和15
所有SwiftUI的
List
在iOS中都有一个UITableView
支持,所以你需要改变 * tableView* 的背景色,但是由于Color
和UIColor
的值略有不同,你可以去掉UIColor
。现在您可以使用任何背景(包括所有
Color
**请注意,**这些顶部和底部的白色区域是 * 安全的 *,您可以使用
.edgesIgnoringSafeArea()
修饰符来消除它们。恢复
由于
UITableView.appearance().backgroundColor
全局应用,你可以使用.onAppear
修饰符在不同的视图中改变它(因为它是全局改变)。所以你可以使用另一个onAppear
或onDisappear
将它 * 重置 * 回你想要的。默认颜色为:
UIColor.systemGroupedBackground
表示分组样式。UIColor.systemBackground
表示普通样式。而且它们都自动支持暗模式和亮模式。
r8uurelv2#
试试这个
ymdaylpp3#
Mojtaba Hosseini给出的答案是可行的,但是init()语句不是
UITableView
语句的好地方,因为它“硬编码”ContentView的init参数,在这种情况下,它没有任何初始化参数,所以一切都可以正常工作,但是如果@ObservedObject
被添加到视图中,那么这将破坏init函数。只需将UITable语句添加到
body
,显式返回Form
并删除init()
,这就简单多了。然而,在
Form
上设置背景颜色通常会按预期工作。事实上,它在ContentView
屏幕上不工作可能是一个bug。nlejzf6q4#
不要更改全局
appearance()
。例如,你可以使用
UITableView.appearance().backgroundColor = .red
将Form
的背景色设置为红色。这可以在视图的init
中进行,但是这会影响 everyList
和Form
。或者,您可以使用SwiftUI-Introspect通过执行以下操作来定制单个对象:
您还可以将以下内容添加到每个部分,以使这些部分也变为蓝色:
rkue9o1l5#
如果您不想修改
Form
的安全区域,也可以使用ZStack
:s6fujrry6#
将这些代码复制到每个 * 表单 * 视图下面:
6mw9ycah7#
上面的解决方案并没有真正达到我想要的效果。我想要一个有清晰背景的初始屏幕,随后的屏幕有默认的iOS systemGroupedBackground颜色。使用appearse()和dispense()对我来说并不奏效,因为在不同的标签页之间切换会导致外观上的错误。
我提出了下面的解决方案,它借鉴了上面的解决方案。
对于我的ContentView屏幕,我将此代码插入到了Struct中。
这是一个影响所有形式的全球性变化。
对于所有希望使用默认颜色的窗体,我将此代码插入到Form {}的外部。
kr98yfug8#
适用于所有版本
看到这些解决方案后,我创建了一个修改器供您在iOS 16及以下版本中使用。
要使用它,你只需要更新后的形式.