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)