SwiftUI NavigationBar 模糊效果异常问题求助
我在NavigationStack里嵌套了一个简单的List,代码如下:
NavigationStack{ List{ Section{ // ... 列表内容 } } .listStyle(.plain) .navigationBarTitleDisplayMode(.automatic) .navigationTitle("New event") .toolbar{ ToolbarItem(placement:.topBarTrailing){ Button("Done"){ // ... 按钮点击逻辑 } } } }
现在遇到个头疼的问题:滚动列表时,导航栏只有标题周围有模糊效果,整个导航栏区域并没有完全覆盖这个效果。在Xcode预览里显示是正常的,但一到模拟器或者真机上运行就出问题。
下面是效果对比:
- 预期正常效果:

- 实际异常效果:

我希望绿色高亮的整个导航栏区域都能应用模糊效果,有没有大佬能帮忙解决这个问题?
我的解决方案分享
我之前开发时也碰到过完全一样的问题,试了几个方法都能解决,你可以挨个试试看:
强制设置导航栏背景为透明并保持可见
这个方法最常用,给NavigationStack添加toolbarBackground修饰符,强制让导航栏的整个区域都能响应滚动模糊:NavigationStack{ // 你的List和其他内容保持不变 } .toolbarBackground(Color.clear, for: .navigationBar) .toolbarBackground(.visible, for: .navigationBar)这样能确保导航栏背景不会因为滚动被隐藏,从而让模糊效果覆盖整个区域。
调整List的滚动背景设置
有时候List默认的滚动背景会干扰导航栏的模糊表现,可以试试隐藏List的滚动背景,手动设置背景色:List{ // ... 列表内容 } .scrollContentBackground(.hidden) .background(Color(UIColor.systemBackground))这样能避免List的背景和导航栏的模糊效果冲突。
排查父视图的背景干扰
检查一下NavigationStack的父视图有没有设置不透明的背景色,如果有的话可能会遮挡导航栏的模糊效果,尝试把父视图的背景改成透明或者移除不必要的背景设置。
优先试试第一个方法,我当时就是靠这个解决的,大概率能帮你搞定这个问题~
备注:内容来源于stack exchange,提问作者helloimbrando
相关产品推荐
相关产品推荐

