自定义UINavigationBar返回按钮定位问题求助
嘿,我来帮你搞定这个返回按钮左移的问题!系统的UINavigationBar对返回指示器默认有固定边距,咱们可以通过以下几种方法调整:
方法一:直接调整backIndicatorInsets(最推荐)
系统提供了backIndicatorInsets属性专门用来调整返回指示器的位置,只需要在你设置backIndicatorImage的代码后面加上偏移设置即可,负数代表向左移动,数值可以根据需求微调:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let backImage = UIImage(view: backButton).withRenderingMode(.alwaysOriginal) navigationController?.navigationBar.backIndicatorImage = backImage navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage // 这里设置左偏移,-10可以根据实际需求修改 navigationController?.navigationBar.backIndicatorInsets = UIEdgeInsets(top: 0, left: -10, bottom: 0, right: 0) }
注意:一定要同时设置backIndicatorTransitionMaskImage,否则转场时可能会出现显示异常。
方法二:检查自定义UIView/UIImage的尺寸
如果你生成的UIImage(view: backButton)本身包含多余的透明边距,那即使调整了系统偏移,看起来也像是没移动。可以做这两步检查:
- 确保你的
backButton这个UIView的bounds刚好包裹住实际内容,没有额外的padding - 生成UIImage时,裁剪掉多余的透明区域(可以写个工具方法来处理UIImage的裁剪)
方法三:替换为自定义UIBarButtonItem(完全自定义控制)
如果前两种方法都达不到预期,咱们可以直接抛弃系统的返回指示器逻辑,用自定义的UIBarButtonItem来实现:
// 在目标页面的viewDidLoad里设置 override func viewDidLoad() { super.viewDidLoad() // 创建自定义返回按钮的view let customBackButton = backButton // 你的自定义UIView customBackButton.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(backAction))) // 创建BarButtonItem,用自定义view作为customView let backBarItem = UIBarButtonItem(customView: customBackButton) // 可以通过调整customView的frame或者添加约束来控制位置 customBackButton.frame = CGRect(x: 0, y: 0, width: 44, height: 44) // 设置为左按钮 navigationItem.leftBarButtonItem = backBarItem } @objc private func backAction() { navigationController?.popViewController(animated: true) }
这种方式能完全控制按钮的位置,甚至可以添加额外的交互逻辑。
内容的提问来源于stack exchange,提问作者Codetard
相关产品推荐
相关产品推荐

