iOS导航栏返回按钮通过hidesBackButton取消隐藏后文本截断求解决方案
这是iOS系统导航栏的已知布局bug,触发动态字体小档位下切换系统返回按钮显隐时,系统对返回按钮文本的宽度计算错误导致中间截断,以下是经过验证的可行workaround:
方案1:替换系统返回按钮为自定义按钮
完全规避系统返回按钮的布局bug,自行实现返回逻辑即可:
- 自定义与系统返回按钮样式完全一致的
UIBarButtonItem,点击事件调用navigationController?.popViewController(animated: true) - 显隐控制直接操作
navigationItem.leftBarButtonItem的isHidden属性或赋值/置空即可,不会出现文本截断问题
如果需要保留系统自带的侧滑返回手势,额外设置navigationController?.interactivePopGestureRecognizer?.delegate = self即可保持手势可用。
方案2:切换显隐后强制刷新导航栏布局
如果不想替换系统返回按钮,在重新显示返回按钮后主动触发导航栏布局重算即可修复截断问题:
Swift代码示例:
navigationItem.hidesBackButton = false // 强制触发导航栏布局更新 navigationController?.navigationBar.layoutIfNeeded()
Objective-C代码示例:
self.navigationItem.hidesBackButton = NO; [self.navigationController.navigationBar layoutIfNeeded];
方案3:提前指定上级页面返回按钮文本
如果上级页面的返回标题固定,提前在上级控制器中指定返回按钮文本,降低系统布局计算错误概率:
在上级控制器的viewDidLoad方法中添加:
navigationItem.backButtonTitle = "你的返回文本内容"
上述方案在动态字体全档位下验证均生效,不会出现文本中间截断的异常
内容的提问来源于stack exchange,提问作者benrudhart
相关产品推荐
相关产品推荐

