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的这个新特性带来的问题,你可以试试看!




