web-dev-qa-db-ja.com

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

ただし、戻るボタンは非表示になりません(スクリーンショットを参照)。

Simulator screen

PD:

別のシミュレータでアプリケーションを実行しましたが、この「バグ」はiOS 8でのみ表示されます。

18
ZhukV

これは私のために働いた。

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

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

私は多くの答えを試しましたが、私のために働いた唯一のものは次のとおりでした:

    override func viewDidLoad() {
    super.viewDidLoad()

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

ViewDidLoadで次のメソッドを呼び出します。

Objective-C:

self.navigationItem.leftBarButtonItem = nil;

または

self.navigationItem.hidesBackButton = YES;

迅速:

navigationItem.hidesBackButton = true
6
LS_

迅速:

self.navigationItem.hidesBackButton = true
4
William Hu

これは、viewWillAppearで新しいビューをプッシュしたことが原因であることがわかりました。それをviewDidAppearに移動すると、戻るボタンが表示されませんでした。奇妙なことに、この問題はiOS8でのみ発生しました。

3

これを試して:

[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];
    }
}
2
Chun-Wei Chen

viewWillAppear()メソッドでself.navigationItem.hidesBackButton = trueを使用してみてください。これでうまくいきました。

1
Array

SetHidesBackButtonを使用して戻るボタンを非表示にできるのは、ボタンをカスタマイズしていない場合のみです。

メソッドリファレンスから:「このナビゲーションアイテムが最上位アイテムであるときに戻るボタンを非表示にする場合はtrueを指定します。カスタムボタンで置き換えられていない場合、戻るボタンを表示する場合はfalseを指定します。」 (最後の行に注意してください)

その場合の単純な解決策は、まずleftBarButtonItemをnilに設定することです。

Swift 3.0:

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

そのコードはどこで書いたのですか?

View ControllerのloadView/viewDidLoad:メソッドを追加するのと同じくらい簡単にする必要があります

[self.navigationItem setHidesBackButton:YES];

これはiPhone 6で動作します

1
SomeGuy

これを行うことがわかった唯一の方法は、ナビゲーションバーを非表示にし、ストーリーボードにナビゲーションバーを追加し、次のViewControllerでナビゲーションバーを再表示することです。ステータスバーにラベルを追加するだけで、ナビゲーションバーが統一されます。他の方法は見つかりませんでした...

screen

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

ナビゲーションバーが次のViewControllerに表示されるように、次のように宣言します:

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

}
0
oscar castellon

このバグは、ストーリーボードを使用する場合にのみ発生します。別の解決策は、空のタイトルを持つUIBarButtonItemを追加して「偽装」することです。

0
Yue-Hsun Lin