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

如何实现iOS 11风格的白色半透明UINavigationBar效果?

实现iOS 11风格的白色半透明UINavigationBar

这个问题我之前折腾过好一会儿,iOS 11里像「文件」App那样的白色半透明导航栏,确实和直接给barTintColor设白色的效果天差地别——后者会让导航栏变得完全不透明(或者说半透明的模糊感被彻底覆盖),而系统自带的那种是白色基底但仍保留通透的模糊质感。下面给你两种适配不同iOS版本的靠谱实现方式:

方法一:iOS 13+ 推荐方案(使用UINavigationBarAppearance)

iOS 13之后苹果推出了UINavigationBarAppearance,可以更精细地控制导航栏的外观,这也是现在最推荐的写法:

// 创建外观配置实例
let navBarAppearance = UINavigationBarAppearance()

// 设置背景为带透明度的白色,同时保留模糊效果
// 这里的alpha值可以根据需求调整,0.8是比较贴近「文件」App的效果
navBarAppearance.backgroundColor = UIColor.white.withAlphaComponent(0.8)
// 或者如果想要更贴近系统原生的模糊质感,可以用这个:
// navBarAppearance.backgroundEffect = UIBlurEffect(style: .systemMaterialLight)

// 调整标题和按钮的颜色,避免和白色背景冲突
navBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
navBarAppearance.buttonAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.systemBlue]

// 将配置应用到导航栏的不同状态
navigationController?.navigationBar.standardAppearance = navBarAppearance
navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
navigationController?.navigationBar.compactAppearance = navBarAppearance

// 必须开启半透明,否则所有半透明效果都会失效
navigationController?.navigationBar.isTranslucent = true

方法二:iOS 11-12 兼容方案

对于iOS 13之前的版本,没有UINavigationBarAppearance,我们可以通过调整barTintColor、背景图和阴影图来实现:

// 设置带透明度的白色作为barTintColor
navigationController?.navigationBar.barTintColor = UIColor.white.withAlphaComponent(0.8)

// 移除导航栏底部的阴影线,避免破坏整体的干净感
navigationController?.navigationBar.shadowImage = UIImage()

// 设置空的背景图,让半透明效果正常生效
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

// 开启半透明开关
navigationController?.navigationBar.isTranslucent = true

// 同样要调整标题和按钮颜色,保证可读性
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
navigationController?.navigationBar.tintColor = UIColor.systemBlue

关键说明

为什么直接设置barTintColor = .white不行?因为当isTranslucent = true时,UINavigationBar的底层是模糊效果,barTintColor会和这个模糊层混合。如果设置纯白色(alpha=1),会完全覆盖模糊层,导致导航栏看起来是实心的白色;而设置带透明度的白色,或者直接使用模糊效果,才能保留那种半通透的质感,和「文件」App的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:22:42