SwiftUI中打开原生Menu时glassEffect效果消失的修复方案咨询
最近在做SwiftUI布局(比如侧边栏)的时候碰到了一个很影响视觉一致性的问题:当我给视图添加了 .glassEffect(.regular.interactive(), in: RoundedRectangle(cornerRadius: 16)) 这个毛玻璃效果后,只要打开里面的原生Menu控件,毛玻璃效果就会立刻消失——要么视觉效果完全断裂,要么直接被隐藏,直到关闭菜单才会恢复。
重现步骤
- 创建一个SwiftUI视图,并为其添加
.glassEffect(.regular.interactive(), in: ...)修饰符 - 在该视图内部添加一个原生的
Menu控件 - 在iPad真机或者iOS 16.0 beta模拟器上运行应用
- 点击打开菜单 → 毛玻璃效果立即消失
- 关闭菜单 → 效果恢复
预期行为
毛玻璃效果应该在原生菜单打开期间保持可见且有效。毕竟SwiftUI一直倡导基于Material的设计风格,像Menu这类标准控件不应该破坏视觉一致性。
实际行为
打开菜单时,底层的毛玻璃视图会被“扁平化”或者隐藏,推测是因为渲染上下文切换到了UIKit管理的模式导致的。
环境信息
- Xcode版本:Xcode 16.4 Beta(对应iOS 16 SDK)
示例代码
struct ExampleView: View { var body: some View { VStack(alignment: .leading, spacing: 0) { TopBarMenu() Spacer() } .padding() .glassEffect(.regular.interactive(), in: RoundedRectangle(cornerRadius: 16)) .frame(width: 300, height: 500) .padding() .background(.gray.opacity(0.2)) // 模拟背景 } } struct TopBarMenu: View { var body: some View { HStack { Menu { Button("Library A", action: {}) Button("Library B", action: {}) Divider() Button("Settings", action: {}) } label: { Label("Select Library", systemImage: "chevron.down") .foregroundStyle(.blue) } Spacer() } .padding(.horizontal) } } #Preview { ExampleView() }
有没有大佬遇到过类似的问题?有没有可行的临时解决方案或者官方的修复方向?麻烦指点一下,谢谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

