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

Как скрыть родительскую панель при нажатии контроллера в navigationController

У меня есть приложение с контроллером панели вкладок, и каждый вид содержит контроллер навигации. Мое главное окно выглядит следующим образом: Изображение здесь http://www.freeimagehosting.net/image.php?7bc867a594.png

Все работает нормально, как есть, но я заметил проблему при передаче подробного представления в контроллер навигации. В didSelectRowAtIndexPath для tableviewcontroller, который принадлежит контроллеру панели вкладок (тот, который называется Last в изображении), я делаю это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil];

    [self.navigationController pushViewController:articleController animated:YES];

    [articleController release];
    articleController = nil;
}

ArticleViewController имеет собственную панель вкладок, потому что он должен отображать разные вещи. Проблема в том, что когда я помещаю ArticleViewController в navigationController, я вижу обе вкладки в нижней части представления. Можно ли как-нибудь решить эту проблему?

заранее спасибо

4b9b3361

Ответ 1

После траты часов и размещения вопроса здесь я обнаружил, что решение этой проблемы заключается в добавлении следующей строки после создания экземпляра ArticleController.

articleController.hidesBottomBarWhenPushed = YES;

Ответ 2

Если вы предпочитаете настройку раскадровки по кодированию, для этого есть переключатель. Просто зайдите destinationViewController > Attribute Inspector:

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

Ответ 3

Очень простое решение:

 destinationViewController.hidesBottomBarWhenPushed = YES;

В вашем случае:

 articleController.hidesBottomBarWhenPushed = YES;

Надеюсь, это поможет!

Ответ 4

Вы можете просто скрыть родительскую вкладку через раскадровку.

Выберите viewcontroller > Инспектор атрибутов > проверьте Скрыть нижнюю панель в Push

Ответ 5

Вы можете добавить приведенный ниже код в контроллер представления, который вы нажимаете.

-(BOOL)hidesBottomBarWhenPushed
{ 
     return YES;
}

Это позволит скрыть панель вкладок только в контроллере push-представления, и когда вы откроете панель вкладок контроллера представления, она не будет отображаться в остальных остальных контроллерах представления.

Swift версия (3.x и выше)

override var hidesBottomBarWhenPushed: Bool {
    get {
        return navigationController?.topViewController == self
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

Спасибо

Ответ 6

для быстрого 3, напишите тот же код, который вы показываете на вкладке, перед кодом pushviewController, как показано ниже

   var frame = self.tabBarController?.tabBar.frame
    frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!+112
    UIView.animate(withDuration: 0.2, animations: {
        self.tabBarController?.tabBar.frame = frame!
    })
    self.navigationController?.pushViewController(viewController, animated: true)

или просто использовать для отображения панели вкладок, вы можете использовать

  viewController.hidesBottomBarWhenPushed = false

Ответ 7

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

Перейдите к построителю интерфейса в Xcode → открыть инспектор атрибутов и проверьте элемент "Скрыть нижнюю панель на Push" для контроллера просмотра, который вы не хотите показывать панель вкладок. Он будет работать!

Ответ 8

Используйте свойство hidesBottomBarWhenPushed в контроллере, который вы хотите скрыть.

Для скрытия все контроллеры помещены в prepare for segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    segue.destination.hidesBottomBarWhenPushed = true
}