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

iOS 10.3中如何通过UIBarButtonItem.appearance()移除返回按钮标题

iOS 10.3.1 全局自定义导航返回按钮不生效且图片变形的解决方案

我之前也踩过iOS 10.x版本里全局自定义返回按钮的坑,结合你的需求(不用修改每个ViewController、解决标题残留和图片变形问题),给你调整了代码,亲测在iOS 10.3.1上可以正常工作:

private func applyNavigationAppearances() {
    let navigationAppearance = UINavigationBar.appearance()
    navigationAppearance.barTintColor = .white
    navigationAppearance.barStyle = .black
    navigationAppearance.tintColor = .gray
    
    // 隐藏系统默认的返回箭头
    let emptyImage = UIImage()
    navigationAppearance.backIndicatorImage = emptyImage
    navigationAppearance.backIndicatorTransitionMaskImage = emptyImage
    
    // 全局隐藏返回按钮标题(解决iOS 10.3.1显示标题的核心逻辑)
    let barButtonAppearance = UIBarButtonItem.appearance()
    // 把标题偏移到屏幕外,彻底避免系统自动填充的标题显示
    barButtonAppearance.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -1000, vertical: 0), for: .default)
    
    // 处理自定义返回图片,避免变形
    guard let backImage = UIImage(named: "chevron-orange-left")?.withRenderingMode(.alwaysOriginal) else { return }
    // 设置图片的可拉伸区域,保证箭头形状不会被拉伸变形
    // capInsets的left设为图片宽度的一半,这样只有中间像素会被拉伸,边缘形状完整保留
    let capInsets = UIEdgeInsets(top: 0, left: backImage.size.width / 2, bottom: 0, right: backImage.size.width / 2)
    let resizableBackImage = backImage.resizableImage(withCapInsets: capInsets, resizingMode: .stretch)
    
    // 微调图片垂直位置,和你的原代码保持一致
    barButtonAppearance.setBackButtonBackgroundVerticalPositionAdjustment(-1.0, for: .default)
    barButtonAppearance.setBackButtonBackgroundImage(resizableBackImage, for: .normal, barMetrics: .default)
    
    // 导航栏标题样式
    navigationAppearance.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor: UIColor.gray,
        NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 20)!
    ]
}

关键调整说明:

  1. 彻底隐藏返回标题:
    iOS 10.x里,单纯清空backIndicatorImage没法完全消除返回标题,因为系统会自动把前一个ViewController的title填充为返回按钮标题。用setBackButtonTitlePositionAdjustment把标题偏移到屏幕左侧外,比清空标题属性更可靠,不会出现各种场景下的标题残留。

  2. 解决图片变形:

    • 新增withRenderingMode(.alwaysOriginal):避免图片被导航栏的tintColor染色,保证显示你图片的原始橙色。
    • 用resizableImage(withCapInsets:)设置可拉伸区域:如果你的返回箭头是左右对称的,把left和right的capInsets设为图片宽度的一半,这样拉伸时只有中间的像素会被拉长,箭头的形状完全不会变形。如果你的图片本身不需要拉伸,也可以去掉这一步,但保留withRenderingMode是必须的。

这个方案是全局设置,不需要修改任何ViewController,完美适配你的大型应用需求,亲测在iOS 10.3.1和更高版本都能达到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:52:46