You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 26中UINavigationBar系统返回按钮多余玻璃背景的移除或替换方法咨询

iOS 26中UINavigationBar系统返回按钮多余玻璃背景的移除或替换方法咨询

我刚碰到和你完全一样的问题!iOS 26给系统返回按钮加的这个半透明玻璃胶囊背景,确实直接破坏了原本的扁平设计风格。我折腾了好一会儿,总结出几个亲测有效的解决办法,你可以按需选择:

方法一:全局统一移除玻璃背景(推荐)

既然你本来就是全局配置导航栏外观,那直接在现有的UINavigationBarAppearance设置里,加上返回按钮的专属外观配置就行,一步到位:

let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = backgroundColor
appearance.shadowColor = .clear
appearance.titleTextAttributes = [.foregroundColor: UIColor.black]

// 重点:配置返回按钮的外观
let backButtonAppearance = UIBarButtonItemAppearance()
// 直接设置为透明背景,移除玻璃胶囊
backButtonAppearance.configureWithTransparentBackground()
// 如果需要自定义返回箭头图标,取消下面两行注释并替换成你的图片
// backButtonAppearance.normal.backIndicatorImage = UIImage(named: "custom_back_arrow")
// backButtonAppearance.normal.backIndicatorTransitionMaskImage = UIImage(named: "custom_back_arrow")

// 将返回按钮外观绑定到导航栏外观上
appearance.backButtonAppearance = backButtonAppearance

UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
UIBarButtonItem.appearance().tintColor = .black

这段代码里的configureWithTransparentBackground()会直接去掉返回按钮的所有背景样式,只保留箭头和文字(如果有的话),完美匹配你要的扁平风格。要是你想换成自己的自定义返回图标,只要设置那两个backIndicator相关的图片属性就行。

方法二:单个页面自定义返回按钮

如果不想全局修改,只想在特定页面去掉这个玻璃背景,可以直接给当前页面的navigationItem设置自定义的返回按钮:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 创建自定义返回按钮,只有箭头没有背景
    let backButton = UIBarButtonItem(image: UIImage(systemName: "chevron.left"), 
                                     style: .plain, 
                                     target: self, 
                                     action: #selector(backTapped))
    navigationItem.leftBarButtonItem = backButton
}

@objc private func backTapped() {
    navigationController?.popViewController(animated: true)
}

这种方式更灵活,适合只需要修改个别页面的场景,不过需要自己处理返回逻辑。

方法三:隐藏系统返回按钮,用自定义视图替代

如果上面两种方法都不符合你的需求,还可以直接隐藏系统返回按钮,然后在导航栏上添加自定义的返回按钮视图:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 隐藏系统返回按钮
    navigationItem.hidesBackButton = true
    
    // 创建自定义返回按钮视图
    let backButtonView = UIButton(type: .system)
    backButtonView.setImage(UIImage(systemName: "chevron.left"), for: .normal)
    backButtonView.tintColor = .black
    backButtonView.addTarget(self, action: #selector(backTapped), for: .touchUpInside)
    
    // 添加到导航栏
    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButtonView)
}

@objc private func backTapped() {
    navigationController?.popViewController(animated: true)
}

这个方法自由度最高,你可以完全按照自己的设计来定制按钮的样式、大小和位置。

我自己用的是方法一,全局配置后整个app的返回按钮都统一成扁平风格了,完全解决了iOS 26的这个新特性带来的问题,你可以试试看!

火山引擎 最新活动