使用Swift中的hidesBackButton在导航栏中隐藏返回按钮

40

我想在从一个视图转换到另一个视图时隐藏后退按钮。我看过有关此问题的问题并且每个答案都是“使用hidesBackButton”。但这样做存在以下问题:

  • 当我将其放入viewDidLoad/viewWillAppear中时,返回按钮箭头会隐藏,但字符串“返回”不会。

  • 当我将其放入viewDidAppear中时,返回按钮消失了,但对用户可见。

我该如何解决这个问题?

编辑:

以下是您可以重现此问题(或错误)的方法:
在Xcode中使用Swift创建新的选项卡应用程序。在FirstViewController.swift中使用performSegueWithIdentifier导航到第二个视图控制器。在SecondViewController.swift中使用hidesBackButton隐藏导航栏后退按钮,您将看到问题所在。


似乎你的问题出在其他地方。self.navigationItem.hidesBackButton = YES 在viewDidLoad()中运行得很完美。那么,你能发一些代码吗? - zinnuree
1
在 Xcode 中使用 Swift 创建一个新的选项卡应用程序。在 FirstViewController.swift 中使用 performSegueWithIdentifier 导航到第二个视图控制器。在 SecondViewController.swift 中使用 hidesBackButton 隐藏导航栏返回按钮,你将看到问题所在。 - Amer Hukic
@zinnuree,你是否遇到了和我一样的问题? - Amer Hukic
@zinnuree 我这里也有同样的问题。(在iOS 8.1中的viewWillAppear:方法中) - Drux
9个回答

60

使用最新的Swift隐藏返回按钮:

self.navigationItem.setHidesBackButton(true, animated: false)

1
这不应该是:self.navigationItem.setHidesBackButton(true, animated: false)因为他想要隐藏返回按钮吗? - Jordi Sipkens
@JordiSipkens - 是的,谢谢。我已经编辑了答案,使命令隐藏返回按钮。在关闭视图之前再次使用false来显示返回按钮,这应该在使用导航控制器时完成。 - ObjectiveTC
这将隐藏所有内容,包括箭头图标“<”。如何保留箭头图标? - RainCast

52

尝试添加这个:

let backButton = UIBarButtonItem(title: "", style: .Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton

3
我们知道为什么 hidesBackButton 不仅隐藏 "<"(而不是"< Name")吗?这是一个特性还是一个错误?根据视图控制器层次结构中不断变化的条件隐藏“< Name”,但替换左侧栏按钮项似乎会引入更多问题,我需要解决这个问题。 - Drux
不确定。我会使用枚举。 - ericgu
你可以在许多地方做到这一点。 - ericgu
1
这对我也起作用。self.navigationItem.hidesBackButton = true在ViewDidLoad和ViewDidAppear中都没有起作用。 - eric f.
一个更简短的方法是:self.navigationItem.leftBarButtonItem = UIBarButtonItem() 再加上 self.navigationItem.hidesBackButton = true,这样就完美地隐藏了“返回”文本。 - Dávid Pásztor
2
在 Swift 4 中,样式应该是 .plain - Sean O'Bannon

19

您可以使用下面的代码在UINavigationBar上隐藏返回按钮。

Swift 3;

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationItem.hidesBackButton = true
}

14

这对我起了作用

navigationController?.navigationBar.topItem?.hidesBackButton = true

7
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    self.navigationController?.navigationBarHidden = false
    var button: UIButton = UIButton()
    button.setImage(UIImage(named: "person-icon.jpg"), forState: .Normal)
    button.frame = CGRectMake(0, 0, 25, 25)
    button.targetForAction("actioncall", withSender: nil)
    var rightItem:UIBarButtonItem = UIBarButtonItem()
    rightItem.customView = button
    self.navigationItem.rightBarButtonItem = rightItem

    let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
    navigationItem.leftBarButtonItem = backButton
}

override func viewWillAppear(animated: Bool) {
    let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
    navigationItem.leftBarButtonItem = backButton
}

6

尝试添加这个,这对我有用

navigationItem.hidesBackButton = true

3
这对我有用:

这对我有用:

override func viewWillAppear(animated: Bool)
{
    super.viewWillAppear(animated)

    self.tabBarController?.navigationItem.hidesBackButton = true
}

1
当我将它设置在init()中而不是viewDidLoad时,它对我有用。虽然很奇怪。

0
在XCode 11(可能更早,不确定),如果您不想通过程序实现它,也可以在故事板编辑器的属性检查器选项卡下取消勾选框。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接