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];
}
}
}
ただし、戻るボタンは非表示になりません(スクリーンショットを参照)。
PD:
別のシミュレータでアプリケーションを実行しましたが、この「バグ」はiOS 8でのみ表示されます。
これは私のために働いた。
-(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];
}
}
viewWillAppear()
メソッドでself.navigationItem.hidesBackButton = true
を使用してみてください。これでうまくいきました。
SetHidesBackButtonを使用して戻るボタンを非表示にできるのは、ボタンをカスタマイズしていない場合のみです。
メソッドリファレンスから:「このナビゲーションアイテムが最上位アイテムであるときに戻るボタンを非表示にする場合はtrueを指定します。カスタムボタンで置き換えられていない場合、戻るボタンを表示する場合はfalseを指定します。」 (最後の行に注意してください)
その場合の単純な解決策は、まずleftBarButtonItemをnilに設定することです。
Swift 3.0:
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.setHidesBackButton(true, animated: false)
そのコードはどこで書いたのですか?
View ControllerのloadView/viewDidLoad:メソッドを追加するのと同じくらい簡単にする必要があります
[self.navigationItem setHidesBackButton:YES];
これはiPhone 6で動作します
これを行うことがわかった唯一の方法は、ナビゲーションバーを非表示にし、ストーリーボードにナビゲーションバーを追加し、次の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];
}
このバグは、ストーリーボードを使用する場合にのみ発生します。別の解決策は、空のタイトルを持つUIBarButtonItemを追加して「偽装」することです。