18

在 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];
        }
    }
}

但是后退按钮并没有隐藏(见截图):

模拟器画面

升级版:

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

4

11 回答 11

45

这对我有用。

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [self.navigationItem setHidesBackButton:YES];
    [self.navigationItem setTitle:@"Home"];
}
于 2014-10-14T04:05:11.043 回答
15

我尝试了许多答案,但唯一对我有用的是:

    override func viewDidLoad() {
    super.viewDidLoad()

    let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
    navigationItem.leftBarButtonItem = backButton
}
于 2015-05-26T01:55:46.517 回答
6

调用您的 ViewDidLoad 以下方法:

目标-C:

self.navigationItem.leftBarButtonItem = nil;

或者

self.navigationItem.hidesBackButton = YES;

迅速:

navigationItem.hidesBackButton = true
于 2014-09-23T12:46:03.023 回答
4

迅速:

self.navigationItem.hidesBackButton = true
于 2015-10-26T09:11:50.343 回答
3

I found that this was caused by pushing a new view in viewWillAppear, if I moved it to viewDidAppear then the back button didn't show. Strange that this issue only appeared in iOS8.

于 2014-10-01T07:31:38.907 回答
2

尝试这个:

[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];
    }
}
于 2015-01-14T04:01:34.343 回答
1

你在哪里写的代码?

它应该像在视图控制器的 loadView/viewDidLoad: 方法中一样简单,添加这个

[self.navigationItem setHidesBackButton:YES];

这适用于我的 iPhone 6

于 2014-09-23T11:54:56.730 回答
1

尝试使用方法,这对我有用self.navigationItem.hidesBackButton = trueviewWillAppear()

于 2015-05-22T14:09:07.203 回答
1

仅当您没有自定义按钮时,使用 setHidesBackButton 隐藏后退按钮才有效。

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

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

斯威夫特 3.0:

self.navigationItem.leftBarButtonItem = nil
self.navigationItem.setHidesBackButton(true, animated: false)
于 2017-08-18T20:46:11.663 回答
0

此错误仅在您使用 Storyboard 时发生。另一种解决方案是添加一个带有空标题的 UIBarButtonItem 来“伪造”它。

于 2014-10-03T20:31:52.560 回答
0

我发现这样做的唯一方法是隐藏导航栏并在情节提要中添加导航栏并在下一个 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];

}
于 2014-11-17T08:56:57.223 回答