Как скрыть кнопку «Назад» на панели навигации на iPhone? - PullRequest
308 голосов
/ 05 марта 2009

Я добавил элемент управления навигацией для переключения между представлениями в моем приложении. Но некоторые виды не должны иметь кнопку «Назад» (предыдущий заголовок). Любые идеи о том, как скрыть кнопку "Назад"?

Ответы [ 13 ]

795 голосов
/ 27 апреля 2009

Objective-C:
self.navigationItem.hidesBackButton = YES;

Swift:
navigationItem.hidesBackButton = true

36 голосов
/ 14 августа 2012

Лучший способ - объединить их, чтобы скрыть кнопку «Назад», даже если вы настроили ее вручную:

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
19 голосов
/ 01 мая 2013

скрыть кнопку возврата с кодом ниже ...

[self.navigationItem setHidesBackButton:YES animated:YES];

или

[self.navigationItem setHidesBackButton:YES];

Также, если у вас есть пользовательский UINavigationBar, попробуйте следующий код

self.navigationItem.leftBarButtonItem = nil;
5 голосов
/ 02 декабря 2014

In Swift :

Добавьте это к контроллеру

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}
5 голосов
/ 16 июня 2012

Используйте код:

 self.navigationItem.backBarButtonItem=nil;
3 голосов
/ 12 апреля 2014

В функции viewDidLoad UIViewController используйте код:

self.navigationItem.hidesBackButton = YES;
2 голосов
/ 30 сентября 2016

Не забывайте, что теперь у нас есть жест слайд-спина. Вы, вероятно, хотите удалить это также. Не забудьте включить его снова при необходимости.

if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
    self.navigationItem.hidesBackButton = YES;
}

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
2 голосов
/ 11 февраля 2016

Не забывайте, что вам нужно вызывать его на объекте, на котором установлен контроллер навигации. Например, если у вас есть навигационный контроллер, нажимающий на контроллер панели вкладок с RootViewController, вызов self.navigationItem.hidesBackButton = YES на RootViewController ничего не сделает. Вам бы действительно пришлось звонить self.tabBarController.navigationItem.hidesBackButton = YES

1 голос
/ 19 февраля 2018

Это не сработало для меня во всех случаях, когда я установил

self.navigationItem.hidesBackButton = YES;

в viewWillAppear или ViewDidLoad, но работал отлично, когда я установил его в инициализации viewController.

1 голос
/ 22 июня 2017

Мне показалось, что ничего из вышеперечисленного не сработало, визуального эффекта не было. Я использую раскадровки с представлением, которое «встроено» в контроллер навигации.

Затем я на уровне кода добавляю свои menuItems, и по какой-то причине «backButton» отображается при визуальной отладке иерархии представления, а значок menuItem отображается под невидимой «кнопкой назад».

Я попробовал настройки, как предлагалось в различных методах подключения, и это не имело никакого эффекта. Затем я попробовал более жестокий подход и перебрал подпредставление, которое также не имело никакого эффекта.

Я проверил размеры своих значков и, кажется, был в порядке. После ссылки на Apple Human Interface Guideline я подтвердил, что мои иконки правильные. (В моем случае на 1 пиксель меньше 24px 48px 72px).

Самая странная часть - это фактическое исправление ...

При добавлении элемента BarButton присвойте ему заголовок, по крайней мере, с одним символом , в моем случае пробел.

Надеется, это кому-нибудь поможет.

//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX 
                                                                    style:UIBarButtonItemStylePlain
                                                                  target:self
                                                                  action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];

[self.navigationItem setLeftBarButtonItem:leftButtonItem];
...