Apple Human Interface Guidelines
указывает, что не следует возиться с панелью вкладок, поэтому (я предполагаю) настройка tabBar.isHidden
не обновляет должным образом остальную часть иерархии представления.
Быстрый поиск предлагает различные UITabBarController
расширения для отображения / скрытия панели вкладок ... но все они выглядят как pu sh tabBar внизу экрана, а не устанавливают его свойство .isHidden
. Может или не может быть подходящим для вашего использования.
Я предполагаю из ваших комментариев, что ваш V C в индексе табуляции 0 имеет кнопку (или какое-либо другое действие), чтобы показать / скрыть tabBar?
Если это так, вот подход, который может выполнить работу ....
Добавить это enum
в ваш проект:
enum TabBarState {
case toggle, show, hide
}
и поместите это забавное c в этот контроллер вида:
func showOrHideTabBar(state: TabBarState? = .toggle) {
if let tbc = self.tabBarController {
let b: Bool = (state == .toggle) ? !tbc.tabBar.isHidden : state == .hide
guard b != tbc.tabBar.isHidden else {
return
}
tbc.tabBar.isHidden = b
view.frame.size.height -= 0.1
view.setNeedsLayout()
view.frame.size.height += 0.1
}
}
Вы можете вызвать его с помощью:
// default: toggles isHidden
showOrHideTabBar()
// toggles isHidden
showOrHideTabBar(state: .toggle)
// SHOW tabBar (if it's hidden)
showOrHideTabBar(state: .show)
// HIDE tabBar (if it's showing)
showOrHideTabBar(state: .hide)
Я бы ожидал , что простое сопряжение .setNeedsLayout()
с .layoutIfNeeded()
после установки свойства tabBar .isHidden
должно работать, но, очевидно, нет.
Быстрое изменение высоты кадра (в сочетании с .setNeedsLayout()
) вызывает автоматическое расположение, хотя изменение высоты не видно.
ПРИМЕЧАНИЕ : Это результат очень краткого тестирования на одном устройстве и одной версии iOS. Я ожидаю, что он будет работать на разных устройствах и версиях, но я еще не закончил полное тестирование.