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

iOS 15 UINavigationBar 转场时顶部灰色半透明问题如何修复

问题根因

  • 仅配置了scrollEdgeAppearance,未同步配置standardAppearance:iOS 15起导航栏的常规展示状态、滚动边缘状态使用两套独立配置,转场过程中会读取standardAppearance配置,两者不一致就会出现灰色半透明异常
  • 在UINavigationBar的扩展中重写awakeFromNib仅对XIB/Storyboard创建的导航栏生效,纯代码创建的导航栏不会触发该方法,且扩展重写系统原生方法本身存在调用逻辑不稳定的问题
  • 使用configureWithDefaultBackground()会保留系统默认半透明属性,和isTranslucent = false的配置冲突

修复代码

推荐使用全局配置方案,在AppDelegate的application:didFinishLaunchingWithOptions:方法中添加如下代码:

if #available(iOS 15, *) {
    let appearance = UINavigationBarAppearance()
    // 配置不透明背景
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = .white
    // 清除阴影线为可选配置,按需设置
    appearance.shadowColor = .clear
    // 必须同时配置两个状态的外观
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
    // 如果支持横屏紧凑模式,同步添加以下配置
    // UINavigationBar.appearance().compactAppearance = appearance
}

如果是针对个别导航控制器做定制,在导航控制器初始化时设置即可,不要在扩展中重写系统方法。

异常效果参考

异常效果示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:09:01