Как скрыть кнопку «Назад» на панели навигации на iPhone?


315

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

Ответы:


812

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

Swift:
navigationItem.hidesBackButton = true


@ user8170 как скрыть левый barbuttonitem на панели навигации ..?
Rockey

9
Вы не можете скрыть кнопку self.navigationItem.leftBarButtonItem = nil;. Если вы установили leftbarbuttonitem явно, вы можете использовать self.navigationItem.leftBarButtonItem = nil;. self.navigationItem.hidesBackButton = YES;будет скрывать кнопку «Назад» Item
rakeshNS

1
В iOS 7 self.navigationItem.leftBarButtonItem = nil; не влияет на кнопку «Назад», когда она вызывается из viewDidLoad, viewWillAppear или viewDidAppear. Эта строка кода работает внутри viewdidLoad: self.navigationItem.hidesBackButton = YES;
Алекс Заватоне

2
не уверен, поможет ли это, но 'self' всегда является контроллером представления, который представлен в верхней части стека навигационного контроллера.
Кунал Балани

self.navigationItem.hidesBackButton = YES; у меня работает в viewDidLoad, ios 7
leukosaima

38

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

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;

6
Чтобы ответить пользователю 716216, он объяснил это в своем одном предложении объяснения. Вторая строка кода - это то, что работает для случая по умолчанию. Первая строка кода работает, если вы создали и добавили кнопку самостоятельно.
Алекс Заватоне

21

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

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

или

[self.navigationItem setHidesBackButton:YES];

Также, если у вас есть обычай, UINavigationBarпопробуйте ниже код

self.navigationItem.leftBarButtonItem = nil;

в любом классе, когда вы использовали этот код, тогда на панели навигации этого класса кнопка спрятаться будет ...
Paras Joshi

6

В Свифте :

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

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}


3

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

self.navigationItem.hidesBackButton = YES;

2

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


2

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

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

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

1

Добавьте этот код в ваш контроллер представления

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;

1

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

Затем я на уровне кода добавляю свои 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];

1

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

self.navigationItem.hidesBackButton = YES;

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




0
navigationItem.leftBarButtonItem = nil
navigationItem.hidesBackButton = true

если вы используете этот блок кода внутри didLoad или loadView сработали, но не сработали идеально. Если вы посмотрите внимательно, вы увидите, что кнопка «назад» скрывается при загрузке вашего представления. Посмотрите странно.

Какое идеальное решение?

Добавьте компонент BarButtonItem из componentView (Command + Shift + L) в целевую панель навигации viewControllers.

Выберите BarButtonItem set Title = "" на правой панели

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.