【问题标题】:UINavigation controller back button title displays previous titleUINavigationcontroller 后退按钮标题显示上一个标题
【发布时间】:2019-02-05 05:10:46
【问题描述】:

我想将返回按钮标题设置为“返回”。我在情节提要中设置了标题“返回”(导航项 -> 后退按钮),它似乎可以在 iPhone X 上运行。

在 iPhone SE 上进行测试时,我将之前的 VC 标题视为后退按钮标题。所以现在它显示为“

如果 iPhone X 像上面那样显示它就有意义了,因为屏幕宽度更长,因此它有更多空间容纳更长的标题。

我能做些什么来完成这项工作?我已经尝试过一些事情,例如: 子类 UINavigation 控制器并添加:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)

执行上述操作,但直接在视图控制器中。

在 View Controller 标题周围添加空格以使其更长(不起作用,如果它起作用了,那就有点 hacky)。

任何帮助将不胜感激。

【问题讨论】:

  • 您是在当前显示的视图控制器上设置 backBarButtonItem 属性,还是要返回到的那个?
  • 你可以将它实现为 leftBarButtonItem
  • @RakeshaShastri 为什么?如果有合适的方法,他为什么要这样做?

标签: ios swift uinavigationcontroller


【解决方案1】:

要修改后退按钮,您应该在推送之前在启动 segue 的视图控制器上更新它:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Back"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

【讨论】:

  • 这很好,但是如果视图控制器没有使用 segue 推送会发生什么?
【解决方案2】:

您设置backBarButtonItem 的代码很好,但您将其设置在错误的视图控制器上。

如果您有 2 个视图控制器 VCA 和 VCB,并且 VCA 将 VCB 推送到其导航控制器的导航堆栈中,您需要在 VCA 中设置 backBarButtonItem,然后再推送 VCB。您可以在 viewDidLoad 方法中执行此操作

class VCA: UIViewController {
    func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
    }
}

【讨论】:

  • 谢谢。我不知道我应该在 VCA 中设置它。我做到了,它奏效了。感谢您的明确答复。