Скрыть панель вкладок в приложении iOS Swift

91

Я пытаюсь понять, как скрыть панель вкладок в моем приложении iOS Swift. Меня не интересуют какие-то модные анимации или что-то в этом роде. Просто кое-что я могу добавить в функцию ViewDidLoad ().

Роберт
источник
Установите это перед нажатием ВК. vc.hidesBottomBarWhenPushed = trueдолжен делать работу. НЕ показывайте и не скрывайте панель вкладок вручную.
abhimuralidharan

Ответы:

214

Вы можете просто использовать это в своем ViewDidLoad()методе.

self.tabBarController?.tabBar.hidden = true

Для Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Или вы можете изменить положение панели вкладок по оси Z следующим образом:

self.tabBarController?.tabBar.layer.zPosition = -1

и если вы хотите показать это снова, то:

self.tabBarController?.tabBar.layer.zPosition = 0
Дхармеш Хени
источник
14
Дхармеш, спасибо за ответ. Это успешно скрывает панель вкладок, но тогда табличное представление не заполняет экран. Он просто черный там, где должна быть панель вкладок. Думаю, есть еще шаг, чтобы подогнать его под экран?
Роберт
3
Добавьте для этого ограничения.
Дхармеш Хени
2
Какие «ограничения» добавить?
db0
Если вы использовали ограничения, вы можете изменить ограничение высоты для этого или вы можете изменить фрейм tableView. @ db0
Дхармеш Хени
5
Но панель вкладок все равно будет касаться, попробуйте нажать рядом с любой вкладкой невидимой панели вкладок. @DharmeshKheni
Shobhit C
140

Принятый ответ работает, но переход к другому виду имеет прерывистую анимацию (анимация панели вкладок)

Также хотел добавить, хотя решение Kalpesh отлично сработало для меня, я обнаружил, что каждый контроллер представления имеет атрибут для hidesBottomBarWhenPushing (проверьте раскадровку). Если вы хотите скрыть панель вкладок, вы должны поставить галочку на этом. И это отлично сработало бы.

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

Обновление: я не уверен, что это известная вещь, но вот что говорится на странице документации Apple:

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

Я думаю, это означает, что вам нужно установить базовое значение hidesBottomBarWhenPushing на самом верхнем контроллере представления (первый в стеке навигации). После того, как вы установили его на true, вы можете изменить его на false или true для других контроллеров представления на стек. Но если значение hidesBottomBarWhenPushing вашего самого верхнего контроллера представления равно false, оно не будет отображать панель вкладок для других контроллеров в стеке навигации.

Акшанш Тхакур
источник
2
вот что мы должны делать. Намного лучше, чем другие ответы, если вы просто хотите скрыть его, пока вы представляете ViewController
Габриэль Гонсалвес
почему это не работает в Swift 4 ?? Я уже отмечаю эту опцию, но она все равно появляется, когда я перехожу к этому конкретному контроллеру представления
Кен
Это также скрывает панель вкладок для любых контроллеров представления, которые будут добавлены в стек после этого. Есть ли способ вернуть его для этих последующих контроллеров представления?
Джастин Валлели
@JustinVallely Пожалуйста, дайте мне знать, работает ли обновление в ответе
Акшанш Такур
1
Спасибо, у принятого ответа возникла проблема для меня, когда я возвращаюсь к представлению, из которого исходил, панель вкладок для этого также исчезла!
Абед Насери
79

Перед нажатием установите controller.hidesBottomBarWhenPushing = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
Кальпеш Джетани
источник
Не работает при добавлении кучи контроллеров сsetViewControllers
KR
27

Нет необходимости устанавливать свойство isHidden tabBar.

Просто перейдите в ViewController (в StoryBoard) -> Инспектор атрибутов -> В разделе «Контроллер просмотра» установите флажок «Скрыть нижнюю панель при нажатии». Это работает как шарм.

Если вы выберете метод isHidden, вам нужно будет проделать большую работу, то есть сделать так, чтобы он снова появлялся при возврате, а также удалить нижнее пустое пространство после скрытия tabBar.

Теджас
источник
3
Это должен быть фактический ответ. Это позволило мне без проблем установить ограничения для элементов пользовательского интерфейса.
Картик Каннан
2
Hide Bottom Bar on Pushимеет неприятную анимацию, имо.
Теодор Чурару, 09
Когда вы вернетесь с этой страницы, панель вкладок немного зависнет и вернется. Как вы думаете, в чем причина?
Юнус Т.
3

Свифт 3.

self.tabBarController?.tabBar.isHidden = true
Ронни Кибет
источник
3

Вы также можете установить его в расширении (используйте ответ Dharmesh Kheni)

extension UITabBar {
func tabsVisiblty(_ isVisiblty: Bool = true){
    if isVisiblty {
        self.isHidden = false
        self.layer.zPosition = 0
    } else {
        self.isHidden = true
        self.layer.zPosition = -1
    }
}
Яир Хадад
источник
2

Это программный способ для Swift 4.0, 4.1, 4.2, 5.0 и более поздних версий>:

tabBarController?.hidesBottomBarWhenPushed = true

или

hidesBottomBarWhenPushed = true
Дж. Доу
источник
@NicoS. Правда. Где в вопросе / ответе вы читаете что-нибудь о панели инструментов?
J. Doe
Из документации: Логическое значение, указывающее, скрыта ли панель инструментов в нижней части экрана, когда контроллер представления передается на контроллер навигации.
Нико С.
1
Вопрос касается TabBar, а не ToolBar
Нико С.
@NicoS. то же самое и в этой ситуации ... лол. Очевидно, вы даже не удосужились попробовать это.
J. Doe
1
первый не работает, второй следует добавить при выполнении перехода или перед нажатием на контроллер представления.
Гал Шахар
1

Чтобы скрыть navigationBar и tabBar, я использую следующую функцию:

var tabBarHeight : CGFloat!

func fullScreenAction(){
    if navigationController?.isNavigationBarHidden ?? false {
        //Show navigationBar
        navigationController?.setNavigationBarHidden(false, animated: false)

        //Show tabBar
        tabBarController?.tabBar.isHidden = false
        //Update the height of tabBar
        if (!(tabBarController?.tabBar.frame.size.height.isEqual(to: 0))!) {
            tabBarHeight = self.tabBarController?.tabBar.frame.size.height
        }
        tabBarController?.tabBar.frame.size.height   = tabBarHeight
    } else {
        //Hide navigationBar
        navigationController?.setNavigationBarHidden(true, animated: false)

        //Hide tabBar
        tabBarController?.tabBar.isHidden = true
        //Update the height of tabBar
        tabBarHeight = tabBarController?.tabBar.frame.size.height
        tabBarController?.tabBar.frame.size.height   = 0

    }

}

Когда ориентация экрана изменилась, высота tabBar тоже изменится, поэтому я использую следующую функцию для выхода из полноэкранного режима, чтобы изменить размер высоты:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if navigationController?.isNavigationBarHidden ?? false {
        navigationController?.setNavigationBarHidden(false, animated: false)
        tabBarController?.tabBar.isHidden = false
    }
}

Надеюсь, это будет вам полезно.

Альберто
источник