【发布时间】:2021-05-29 22:48:00
【问题描述】:
到目前为止,SwiftUI 不会将当前的强调色传递给工作表。在以下示例中,工作表中按钮的强调色不会是红色。
// Some parent view which sets an accent color, can't change this
struct ContentView: View {
var body: some View {
ChildView()
.accentColor(.red)
}
}
// A child view that uses the accent color set by the parent
struct ChildView: View {
@State var showSheet = false
var body: some View {
VStack {
Button("this uses red"){
showSheet = true
}
.sheet(isPresented: $showSheet){
VStack {
Button("this will ignore accent color"){ }
}
}
}
}
}
我猜这是一个错误,但我正在寻找解决方法。问题是,我不能只设置.accentColor(.red) 或呈现的表格内的任何内容,因为我的应用程序根据设置使用动态强调色。也就是说——我需要能够将 ChildView 的 accentColor 传递到工作表上,而不必知道它是什么。
我尝试将.accentColor(.accentColor) 传递给工作表中的视图,但不起作用。
有什么想法吗?
【问题讨论】:
-
如果你把
.accentColor(.red)放在VStack上,它应该可以工作 -
正如问题中所述,我不能这样做,因为我正在为整个应用程序动态设置强调色,并且需要尊重设置。
-
不幸的是,通过
.sheet呈现视图不会继承环境。有人说这是一个 bug,但在 SwiftUI 2.0 之前就一直是这样,现在仍然存在。另一个问题是某些内置环境设置,例如accentColor使用的设置,不是公开的,因此您无法访问它们并传递它们。