Ответ 1
Это сработало для меня.
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationItem setHidesBackButton:YES];
[self.navigationItem setTitle:@"Home"];
}
После запуска моего приложения в 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.
Это сработало для меня.
-(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;
Swift:
navigationItem.hidesBackButton = true
Swift:
self.navigationItem.hidesBackButton = true
Я обнаружил, что это было вызвано нажатием нового вида в viewWillAppear, если я переместил его в viewDidAppear, тогда кнопка "Назад" не отображалась. Странно, что этот вопрос появился только в iOS8.
Где вы написали этот код?
Это должно быть так просто, как в вашем представлении контроллер loadView/viewDidLoad: метод добавления этого
[self.navigationItem setHidesBackButton:YES];
Это работает для меня на iPhone 6
Попробуйте следующее:
[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];
}
}
Эта ошибка возникает только при использовании раскадровки. Другим решением является добавление UIBarButtonItem с пустым заголовком, чтобы "подделать" его.
Единственный способ, которым я нашел это, - скрыть панель навигации и добавить панель навигации в раскадровку и повторно отобразить панель навигации в следующем ViewController. Все, что мне нужно было сделать, это добавить ярлык в строку состояния, чтобы панель навигации была одинаковой. Я не нашел другого пути...
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
чтобы панель навигации отображалась в следующем диспетчере представлений, объявите в:
- (void)viewWillDisappear:(BOOL)animated
{
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
Попробуйте использовать метод self.navigationItem.hidesBackButton = true
в viewWillAppear()
, это сработало для меня.
Скрытие кнопки "Назад" с помощью setHidesBackButton работает только в том случае, если вы не настроили кнопку.
Из ссылки метода: "Укажите true, если кнопка" Назад "должна быть скрыта, если этот элемент навигации является верхним элементом. Укажите" ложь ", если кнопка" Назад "должна быть видимой, если она не была заменена пользовательским элементом". (Обратите внимание на последнюю строку)
Простое решение в этом случае состоит в том, чтобы сначала установить для leftBarButtonItem значение nil.
Swift 3.0:
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.setHidesBackButton(true, animated: false)