iOS 8:UINavigationController隐藏后退按钮

在iOS 8(XCode 6.0.1,iPhone 6)中运行我的应用程序后,后退按钮不会隐藏。

我的代码:

- (void)removeCategoriesButton { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { [_navigationController.topViewController.navigationItem setHidesBackButton:YES]; [_navigationController.topViewController.navigationItem setLeftBarButtonItem:nil]; } else { UIViewController *controller = _app.window.rootViewController; if ([controller isKindOfClass:[UINavigationController class]]) { UINavigationController *nav = (UINavigationController *)controller; [nav.topViewController.navigationItem setHidesBackButton:YES]; [nav.topViewController.navigationItem setLeftBarButtonItem:nil]; } } } 

但后退按钮不会隐藏(见截图):

模拟器屏幕

UPD:

我在另一个模拟器中运行应用程序,我只在iOS 8上看到这个“bug”。

这对我有用。

 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationItem setHidesBackButton:YES]; [self.navigationItem setTitle:@"Home"]; } 

我尝试了很多答案,但唯一适合我的答案是:

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

使用以下方法调用ViewDidLoad:

Objective-C的:

 self.navigationItem.leftBarButtonItem = nil; 

要么

 self.navigationItem.hidesBackButton = YES; 

迅速:

 navigationItem.hidesBackButton = true 

迅速:

 self.navigationItem.hidesBackButton = true 

我发现这是因为在viewWillAppear中推送一个新视图,如果我将它移动到viewDidAppear然后后退按钮没有显示。 奇怪的是这个问题只出现在iOS8中。

尝试这个:

 [self.navigationItem setHidesBackButton:YES]; for (UIView *view in self.navigationController.navigationBar.subviews) { NSString *name = [NSString stringWithFormat:@"%@",view.class]; if ([name isEqualToString:@"UINavigationItemButtonView"] || [name isEqualToString:@"_UINavigationBarBackIndicatorView"]) { [view setHidden:YES]; } } 

你在哪里写的代码?

它应该像视图控制器的loadView / viewDidLoad:方法一样简单

 [self.navigationItem setHidesBackButton:YES]; 

这适用于iPhone 6

尝试在viewWillAppear()方法中使用self.navigationItem.hidesBackButton = true ,这对我self.navigationItem.hidesBackButton = true

只有在使用Storyboard时才会出现此错误。 另一种解决方案是添加一个带有空标题的UIBarButtonItem来“伪”它。

我发现这样做的唯一方法是隐藏导航栏并在故事板中添加导航栏,并在下一个ViewController中重新显示导航栏。 我所要做的就是在状态栏中添加一个标签,以便导航栏是统一的。 我找不到其他方法……

屏幕

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; [[self navigationController] setNavigationBarHidden:YES animated:YES]; } 

以便导航栏显示在下一个viewcontroller中,声明如下:

 - (void)viewWillDisappear:(BOOL)animated { [[self navigationController] setNavigationBarHidden:NO animated:YES]; } 

仅当您未自定义按钮时,才能使用setHidesBackButton隐藏后退按钮。

从方法参考:“当此导航项是顶部项目时,如果应隐藏后退按钮,则指定true。如果后退按钮应该可见,则指定false,假设它未被自定义项目替换。” (注意最后一行)

在这种情况下,简单的解决方案是首先将leftBarButtonItem设置为nil。

Swift 3.0:

 self.navigationItem.leftBarButtonItem = nil self.navigationItem.setHidesBackButton(true, animated: false)