Подтвердить что ты не робот

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

UPD:

Я запускаю приложение в других симуляторах, и я вижу эту "ошибку" только на iOS 8.

4b9b3361

Ответ 1

Это сработало для меня.

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

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

Ответ 2

Я попробовал много ответов, но единственный, который работал у меня, был:

    override func viewDidLoad() {
    super.viewDidLoad()

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

Ответ 3

Вызовите свой ViewDidLoad следующим способом:

Objective-C:

self.navigationItem.leftBarButtonItem = nil;

или

self.navigationItem.hidesBackButton = YES;

Swift:

navigationItem.hidesBackButton = true

Ответ 4

Swift:

self.navigationItem.hidesBackButton = true

Ответ 5

Я обнаружил, что это было вызвано нажатием нового вида в viewWillAppear, если я переместил его в viewDidAppear, тогда кнопка "Назад" не отображалась. Странно, что этот вопрос появился только в iOS8.

Ответ 6

Где вы написали этот код?

Это должно быть так просто, как в вашем представлении контроллер loadView/viewDidLoad: метод добавления этого

[self.navigationItem setHidesBackButton:YES];

Это работает для меня на iPhone 6

Ответ 7

Попробуйте следующее:

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

Ответ 8

Эта ошибка возникает только при использовании раскадровки. Другим решением является добавление UIBarButtonItem с пустым заголовком, чтобы "подделать" его.

Ответ 9

Единственный способ, которым я нашел это, - скрыть панель навигации и добавить панель навигации в раскадровку и повторно отобразить панель навигации в следующем ViewController. Все, что мне нужно было сделать, это добавить ярлык в строку состояния, чтобы панель навигации была одинаковой. Я не нашел другого пути...

screen

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

чтобы панель навигации отображалась в следующем диспетчере представлений, объявите в:

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

}

Ответ 10

Попробуйте использовать метод self.navigationItem.hidesBackButton = true в viewWillAppear(), это сработало для меня.

Ответ 11

Скрытие кнопки "Назад" с помощью setHidesBackButton работает только в том случае, если вы не настроили кнопку.

Из ссылки метода: "Укажите true, если кнопка" Назад "должна быть скрыта, если этот элемент навигации является верхним элементом. Укажите" ложь ", если кнопка" Назад "должна быть видимой, если она не была заменена пользовательским элементом". (Обратите внимание на последнюю строку)

Простое решение в этом случае состоит в том, чтобы сначала установить для leftBarButtonItem значение nil.

Swift 3.0:

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