iOS 8: UINavigationController hide back button

走远了吗. 提交于 2019-12-09 07:57:01

问题


After I run my application in iOS 8 (XCode 6.0.1, iPhone 6), the back button does not hide.

My code:

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

But the back button does not hide (see screenshot):

UPD:

I run application in another simulators, and i see this "bug" only on iOS 8.


回答1:


This worked for me.

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [self.navigationItem setHidesBackButton:YES];
    [self.navigationItem setTitle:@"Home"];
}



回答2:


I tried many of the answers but the only one that worked for me was:

    override func viewDidLoad() {
    super.viewDidLoad()

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



回答3:


Call on your ViewDidLoad the following method:

Objective-C:

self.navigationItem.leftBarButtonItem = nil;

or

self.navigationItem.hidesBackButton = YES;

Swift:

navigationItem.hidesBackButton = true



回答4:


Swift:

self.navigationItem.hidesBackButton = true



回答5:


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.




回答6:


Try this:

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



回答7:


Where have you written that code?

It should be as simple as in your view controller's loadView/viewDidLoad: method adding this

[self.navigationItem setHidesBackButton:YES];

This works for me on an iPhone 6




回答8:


Try to use self.navigationItem.hidesBackButton = true in viewWillAppear() method, this worked for me.




回答9:


Hiding the back button using setHidesBackButton only works if you have not customized the button.

From the method reference: "Specify true if the back button should be hidden when this navigation item is the top item. Specify false if the back button should be visible, assuming it has not been replaced by a custom item." (Note the last line)

The simply solution in that case is to first set the leftBarButtonItem to nil.

Swift 3.0:

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



回答10:


This bug only happens when you use Storyboard. Another solution is add an UIBarButtonItem with empty title to "fake" it.




回答11:


The only way I've found to do this is to hide the navigation bar and adding a navigation bar in storyboard and redisplay the navigation bar in the next ViewController. All I had to do is add a label in the status bar so that the navigation bar is uniform. I have found no other way...

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

so that the navigation bar is displayed in the next viewcontroller, declare in:

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

}


来源:https://stackoverflow.com/questions/25994219/ios-8-uinavigationcontroller-hide-back-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!