iOS14+ 搭配navigationItem.backButtonDisplayMode.minimal自定义返回按钮问题
你现有代码的逻辑本身符合要求,模拟器侧滑返回失效属于Xcode模拟器的已知偶发问题,无需针对模拟器做额外适配,优先以真机运行结果为准。
针对正式项目不生效的问题,可按以下方向排查:
- 检查项目是否自定义了
UINavigationController,是否主动修改了interactivePopGestureRecognizer的delegate或isEnabled属性,若自定义了手势代理需要保证根页面侧滑时返回false、非根页面返回true,避免手势被全局禁用 - 检查对应子页面或者控制器基类是否主动设置了
leftBarButtonItem/leftBarButtonItems,自定义左侧按钮会覆盖系统原生返回逻辑,导致长按菜单和侧滑手势失效,必须使用系统原生的backIndicator相关配置实现自定义返回图标 - 检查全局是否通过
UIAppearance修改了UINavigationBar的返回按钮配置,是否存在覆盖backIndicatorImage的逻辑,或者是否全局将backButtonTitle设为空字符串(手动设置backButtonTitle为空会导致长按菜单显示空白) - 检查上一级页面的
navigationItem.title是否被正确赋值,backButtonDisplayMode = .minimal仅隐藏显示的标题,长按菜单的文本自动读取上一级页面的navigationItem.title
iOS 14+ 全局最优实现方案如下:
- 全局配置导航栏返回图标,可统一放在
AppDelegate的didFinishLaunchingWithOptions方法中:
if #available(iOS 14.0, *) { let backImage = UIImage(named: "backImage")?.withRenderingMode(.alwaysOriginal) UINavigationBar.appearance().backIndicatorImage = backImage UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage }
- 需要隐藏返回按钮标题的页面,在
viewDidLoad中添加配置即可:
navigationItem.backButtonDisplayMode = .minimal
如果需要全局所有页面都隐藏返回标题,可直接在控制器基类的viewDidLoad中统一添加上述代码,无需每个页面单独配置。
内容的提问来源于stack exchange,提问作者Kevin Renskers
相关产品推荐
相关产品推荐

