iOS Swift如何移除导航栏返回按钮Back文字且保留返回箭头?
导航栏返回按钮"Back"文字问题解决方案
问题现象
尝试通过以下代码定位返回按钮上"Back"文字的来源,所有打印结果均为nil:
public override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.setTransparent(style: .default) print(self.navigationItem.backButtonTitle) print(self.navigationItem.backBarButtonItem?.title) print(self.navigationItem.title) print(self.navigationItem.titleView?.largeContentTitle) }
打印输出:
nil nil nil nil
尝试用self.navigationItem.setHidesBackButton(true, animated: false)会同时隐藏返回箭头和"Back"文字,无法满足保留箭头、仅移除文字的需求。
原因说明
导航栏返回按钮的文案不属于当前显示的页面,而是由push栈中的上一个页面控制:当A页面push进入B页面时,B页面左上角的返回按钮文案,默认读取A页面的navigationItem.backBarButtonItem.title属性。如果A页面没有手动设置该属性,系统会自动fallback显示默认文案"Back",这个默认生成的文案不会写入当前页面的任何可读取属性,因此会出现所有相关属性打印均为nil的情况。
实现方案
方案1:单页面配置(iOS14+ 推荐,无布局兼容问题)
直接在需要隐藏"Back"文字的页面的viewDidLoad生命周期中,设置系统提供的返回按钮显示模式即可,原生保留返回箭头、移除文字,点击事件、交互逻辑完全和默认一致:
override func viewDidLoad() { super.viewDidLoad() // 仅显示返回箭头,不显示文字 navigationItem.backButtonDisplayMode = .minimal }
方案2:兼容低iOS版本
如果需要适配iOS14以下系统,在当前页面初始化一个空标题的返回按钮项即可:
override func viewDidLoad() { super.viewDidLoad() navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) }
方案3:全局统一配置
如果需要App内所有页面的返回按钮都不显示文字,可以通过UIViewController分类+方法交换的方式,统一在所有页面的viewDidLoad中设置上述属性,无需每个页面单独编写代码。
内容的提问来源于stack exchange,提问作者RainCast
相关产品推荐
相关产品推荐

