材质背景上的 SwiftUI contextMenu 在激活时会使内容变暗
Posted
技术标签:
【中文标题】材质背景上的 SwiftUI contextMenu 在激活时会使内容变暗【英文标题】:SwiftUI contextMenu on material background darkens the content when activated 【发布时间】:2021-11-14 00:55:44 【问题描述】:我正在使用material background in SwiftUI(在 ios 15 中引入)。在显示上下文菜单时应用于也具有contextMenu 修饰符的视图时,它会使整个内容变暗。为了确保它与我的项目无关,我创建了一个示例项目,它也有同样的问题。
代码:
struct ContentView: View
var body: some View
ZStack
Color(.systemBlue).ignoresSafeArea()
Text("Press for Context Menu")
.padding()
.background(.regularMaterial)
.contextMenu
Button("Option 1", action: )
Button("Option 2", action: )
Button("Option 3", action: )
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
// .preferredColorScheme(.dark)
结果如下:
有趣的是,它在暗模式下可以正常工作:
【问题讨论】:
【参考方案1】:修饰符的顺序很重要。为避免这种变暗,只需交换修饰符,以便在 .background
之前应用 .contextMenu
:
Text("Press for Context Menu")
.padding()
.contextMenu
Button("Option 1", action: )
Button("Option 2", action: )
Button("Option 3", action: )
.background(.regularMaterial)
应该是这样的:
【讨论】:
…我们这里有一个竞争条件! :P【参考方案2】:在contextMenu 修饰符 之后添加带有材质的背景。但是,当您打开上下文菜单时,您仍然会看到奇怪的外观,因为在它上面应用了另一种材质。
【讨论】:
谢谢!这并不理想,但比我在发布原始问题后尝试通过 ***.com/a/59111191/1659311 的 UIViewRepresentable 使用自定义 VisualEffectView 更好。这是现在的样子:imgur.com/a/5Fm7GaO 你就不能模仿regularMaterial
的外观,对Text
应用一些视图修饰符吗?我还注意到,如果 Text
应用了 fixedSize
,上下文菜单中的模糊可能会略有变化。
看起来是 Apple 的问题 - 我会报告的。目前解决方法已经足够好了。以上是关于材质背景上的 SwiftUI contextMenu 在激活时会使内容变暗的主要内容,如果未能解决你的问题,请参考以下文章
检测 GeometryReader SwiftUI 背景上的点击手势