如何在iPhone上隐藏导航栏上的“返回”按钮?

327

我在我的应用程序中添加了导航控件以在视图之间切换。但是有些视图不应该有“返回”(上一个标题)按钮。有什么办法可以隐藏后退按钮吗?

我在我的应用程序中添加了导航控件以在视图之间切换,但其中的一些视图不应该有“返回”(即前一个标题)按钮。是否有任何方法可以隐藏该后退按钮?
15个回答

834

Objective-C:
self.navigationItem.hidesBackButton = YES;

Swift:
navigationItem.hidesBackButton = true


10
你无法通过self.navigationItem.leftBarButtonItem = nil;来隐藏返回按钮。如果你已经明确地设置了左侧按钮,可以使用self.navigationItem.leftBarButtonItem = nil;self.navigationItem.hidesBackButton = YES;会隐藏返回按钮。 - rakeshNS
1
在iOS 7中,当从viewDidLoad、viewWillAppear或viewDidAppear中发出时,self.navigationItem.leftBarButtonItem = nil;不会影响返回按钮。但是,这行代码可以在viewDidLoad中使用:self.navigationItem.hidesBackButton = YES; - Alex Zavatone
2
不确定这是否有帮助,但“self”始终是一个视图控制器,它被呈现在导航控制器的堆栈顶部。 - Kunal Balani
self.navigationItem.hidesBackButton = yes; 当我使用滑动手势时会出现问题,它会显示返回按钮。 - Bill Xie
这对我不起作用。我使用了这段代码 self.navigationItem.setHidesBackButton(true, animated: true)。 - James Chan
显示剩余2条评论

41

最好的方法是将这些组合起来,这样即使您手动设置它,它也会隐藏后退按钮:

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;

7
回答用户716216的问题,他在他的一句话解释中已经解释了。第二行代码适用于默认情况。如果您自己创建并添加了按钮,则第一行代码有效。 - Alex Zavatone

21

使用以下代码隐藏返回按钮...

[self.navigationItem setHidesBackButton:YES animated:YES];

或者

[self.navigationItem setHidesBackButton:YES];

如果您有自定义的UINavigationBar,请尝试以下代码

Translated:

如果你有自定义的UINavigationBar,那么尝试下面的代码

self.navigationItem.leftBarButtonItem = nil;

在任何类中使用该代码时,该类的导航栏返回按钮将被隐藏... - Paras Joshi

6

在 Swift 中:

将此内容添加到控制器中:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}

4
使用代码:

 self.navigationItem.backBarButtonItem=nil;

1
这将显示导航项的默认返回栏按钮项。 https://developer.apple.com/documentation/uikit/uinavigationitem/1624958-backbarbuttonitem?language=objc - Ivan Tkachenko

3
在UIViewController的viewDidLoad函数中使用以下代码:
self.navigationItem.hidesBackButton = YES;

2

不要忘记需要在拥有导航控制器的对象上调用它。例如,如果您有导航控制器推送到具有RootViewController的选项卡栏控制器,则在RootViewController上调用self.navigationItem.hidesBackButton = YES将不起作用。您实际上需要调用self.tabBarController.navigationItem.hidesBackButton = YES


1
对我来说,以上所有方法似乎都没有起到视觉效果。我正在使用带有“嵌入”导航控制器的故事板视图。然后,在代码级别上添加我的菜单项,但由于某种原因,在可视化调试视图层次结构时,“返回按钮”是可见的,并且我的菜单项图标显示在不可见的“返回按钮”下面。我尝试了各种钩子方法建议的设置,但都没有效果。然后我尝试了一种更加粗暴的方法,即迭代子视图,这也没有效果。我检查了我的图标大小,看起来没问题。在参考苹果人机界面指南后,我确认我的图标是正确的(在我的情况下小了1个像素,分别为24px,48px,72px)。然后最奇怪的部分是实际修复...当添加BarButton项时,请给它一个至少包含一个字符的标题,在我的情况下是一个空格字符。希望这能帮助某些人。
//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX 
                                                                    style:UIBarButtonItemStylePlain
                                                                  target:self
                                                                  action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];

[self.navigationItem setLeftBarButtonItem:leftButtonItem];

1
不要忘记我们现在有向后滑动的手势。您可能也想将其删除。如果需要,请不要忘记重新启用它。
if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
    self.navigationItem.hidesBackButton = YES;
}

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

如果没有这个,很多没有“返回按钮”的控制器将启用滑动返回功能 :) 另外请注意,一旦用户离开当前场景,您需要重新启用interactivePopGestureRezognizer - dvp.petrov

1
在你的视图控制器中添加以下代码。
UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;

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