【发布时间】:2015-04-30 22:11:57
【问题描述】:
我试图弄清楚如何在我的 iOS swift 应用程序中隐藏标签栏。我不关心任何花哨的动画或任何东西。我可以在 ViewDidLoad() 函数中添加一些内容。
【问题讨论】:
-
在推送 VC 之前设置此项。
vc.hidesBottomBarWhenPushed = true应该做这项工作。不要手动显示和隐藏标签栏。
我试图弄清楚如何在我的 iOS swift 应用程序中隐藏标签栏。我不关心任何花哨的动画或任何东西。我可以在 ViewDidLoad() 函数中添加一些内容。
【问题讨论】:
vc.hidesBottomBarWhenPushed = true 应该做这项工作。不要手动显示和隐藏标签栏。
您可以在 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
【讨论】:
推送前设置controller.hidesBottomBarWhenPushed = true
let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
【讨论】:
setViewControllers添加一堆控制器时不起作用
接受的答案有效,但到其他视图的过渡有一个断断续续的动画(标签栏动画)
还想补充一点,虽然 Kalpesh 的解决方案对我来说非常有效,但我发现每个视图控制器都有一个 hidesBottomBarWhenPushed 属性(查看故事板。)如果你想隐藏标签栏,你应该勾选它。而且效果很好。
更新:我不确定这是否是已知的事情,但这是苹果文档页面所说的:
我认为这意味着您必须在最顶层的视图控制器(导航堆栈上的第一个)设置 hidesBottomBarWhenPushed 的基本值。一旦将其设置为 true,您可以将另一个更改为 false 或 true堆栈上的视图控制器。但是,如果您最顶层的视图控制器的 hidesBottomBarWhenPushed 值为 false,它将不会为导航堆栈上的其他控制器显示选项卡栏。
【讨论】:
斯威夫特 3.
self.tabBarController?.tabBar.isHidden = true
【讨论】:
无需设置tabBar 的isHidden 属性。
简单地说,转到 ViewController(在 StoryBoard 中)-> 属性检查器 -> 在“视图控制器”部分下选择“在推送时隐藏底栏”复选框。这就像一个魅力。
如果你走'isHidden'方式,你需要做很多处理,即在你返回时让它再次出现,并在隐藏tabBar后删除底部的空白空间。
【讨论】:
Hide Bottom Bar on Push 有一个令人不快的动画,imo。
您也可以在扩展中设置它(使用 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
}
}
【讨论】:
这是 Swift 4.0、4.1、4.2、5.0 及更高版本的编程方式:
tabBarController?.hidesBottomBarWhenPushed = true
或
hidesBottomBarWhenPushed = true
【讨论】:
为了隐藏 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
}
}
希望对你有用。
【讨论】:
这是我的代码。它只是为了隐藏它的标签栏。 (如果没有很好地建立框架,底部会有一个黑色的视图。)
var oldTabbarFr: CGRect = .zero
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
oldTabbarFr = self.tabBarController?.tabBar.frame ?? .zero
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.isHidden = true
self.tabBarController?.tabBar.frame = .zero
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.tabBarController?.tabBar.isHidden = false
self.tabBarController?.tabBar.frame = oldTabbarFr
}
【讨论】: