You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 16中如何让UINavigationBar始终显示模糊效果?

在iOS 16中强制UINavigationBar保持模糊状态(非滚动时)

核心思路

iOS 16里导航栏的模糊效果默认和滚动视图的滚动状态绑定,要让它在无滚动时也保持模糊,核心是统一滚动边缘外观(scrollEdgeAppearance)和标准外观(standardAppearance)的配置,让两者都使用带模糊的样式。

具体实现步骤

1. 统一导航栏外观配置

在视图控制器的viewDidLoad中创建并配置UINavigationBarAppearance实例,让所有场景下的导航栏都使用模糊样式:

let navAppearance = UINavigationBarAppearance()
// 配置透明背景以显示模糊效果
navAppearance.configureWithTransparentBackground()
// 设置模糊风格,可根据需求替换为.systemMaterialDark等
navAppearance.backgroundEffect = UIBlurEffect(style: .systemMaterial)

// 关键:让标准外观、滚动边缘外观、紧凑布局外观都使用同一配置
navigationController?.navigationBar.standardAppearance = navAppearance
navigationController?.navigationBar.scrollEdgeAppearance = navAppearance
navigationController?.navigationBar.compactAppearance = navAppearance
navigationController?.navigationBar.compactScrollEdgeAppearance = navAppearance

2. 辅助配置(解决潜在布局问题)

如果配置后仍有异常,可添加以下设置确保效果稳定:

// 强制启用滚动边缘外观逻辑
navigationController?.navigationBar.isScrollEdgeAppearanceEnabled = true
// 确保TableView布局适配导航栏,避免偏移
tableView.contentInsetAdjustmentBehavior = .automatic

3. 避坑提示

  • 不要设置navigationBar.isTranslucent = false,这会直接关闭导航栏的模糊效果
  • 若有自定义标题、按钮样式,需在UINavigationBarAppearance中同步配置(如titleTextAttributes),避免样式割裂
  • SwiftUI项目可通过.toolbarBackground(.ultraThinMaterial, for: .navigationBar)结合.toolbarBackground(.visible, for: .navigationBar)实现相同效果

效果验证

完成配置后,无论UITableView是否处于滚动状态,UINavigationBar都会持续保持模糊背景,不会在停止滚动后切换到非模糊样式。

内容的提问来源于stack exchange,提问作者Gralex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:06:56