在IOS swift app中隐藏标签栏

Rob*_*ert 78 ios swift

我正在试图弄清楚如何在我的iOS swift应用程序中隐藏标签栏.我不关心任何花哨的动画或任何东西.我可以把它放在ViewDidLoad()函数中.

Dha*_*esh 182

您可以在ViewDidLoad()方法中使用它.

self.tabBarController?.tabBar.hidden = true
Run Code Online (Sandbox Code Playgroud)

对于swift 3.0:

self.tabBarController?.tabBar.isHidden = true
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式更改标签栏的z位置:

self.tabBarController?.tabBar.layer.zPosition = -1
Run Code Online (Sandbox Code Playgroud)

如果你想再次展示它,那么:

self.tabBarController?.tabBar.layer.zPosition = 0
Run Code Online (Sandbox Code Playgroud)

  • Dharmesh,谢谢你的回复.这成功地隐藏了标签栏,但表格视图没有填满屏幕.标签栏应该是黑色.我想还有另一个步骤让它适合屏幕吗? (9认同)
  • 但标签栏仍然可以触摸,尝试在隐形标签栏的任何标签附近点击.@DharmeshKheni (5认同)
  • 添加约束. (2认同)
  • 要添加的“约束”是什么? (2认同)

Aks*_*kur 123

接受的答案有效,但转换到其他视图时会出现与标签栏相关的不连贯动画.

虽然Kalpesh的解决方案对我来说非常合适,但我还想知道,我发现每个视图控制器都有一个hidesBottomBarWhenPushed属性(查看故事板).如果你想隐藏标签栏,你应该勾选它.它会很棒.

在此输入图像描述

更新:我不确定这是否是一个已知的东西,但这是苹果文档页面所说的:

添加为导航控制器子级的视图控制器可以在屏幕底部显示可选工具栏.最顶层视图控制器上此属性的值确定工具栏是否可见.如果此属性的值为true,则隐藏工具栏.如果此属性的值为false,则条形图可见.

我认为这意味着您必须在最顶层的视图控制器(导航堆栈上的第一个)上设置hidesBottomBarWhenPushed的基本值.一旦将其设置为true,您可以将其更改为false或true为其他视图控制器堆.但是,如果您的最顶层视图控制器的hidesBottomBarWhenPushed值为false,则它不会显示导航堆栈上其他控制器的选项卡栏.

  • 这就是我们应该做的.如果您只想在呈现ViewController时隐藏它,那么比其他答案要好得多 (2认同)

kal*_*ani 70

在push set controller.hidesBottomBarWhenPushed = true之前

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
Run Code Online (Sandbox Code Playgroud)


Tej*_*jas 25

无需设置tabBar的isHidden属性.

简单地说,转到ViewController(在StoryBoard中) - >属性检查器 - >在"视图控制器"部分下,选择"在推送时隐藏底栏"复选框.这就像一个魅力.

如果你采用'isHidden'方式,你需要做很多处理,即当你回去时再次出现,并在隐藏tabBar后删除底部空白区域.

  • 这应该是实际的答案.这允许我为我的UI元素设置约束而不会有任何麻烦. (3认同)
  • “推送时隐藏底部栏”具有令人不愉快的动画imo。 (2认同)

sbi*_*eek 6

隐藏和显示带有动画的选项卡栏

对于那些希望用动画隐藏/显示标签栏的人。

自 iOS 13 起,UITabBar 的动画行为发生了变化。您不能再使用CGAffineTransform,而是应该为其框架位置设置动画。

请在此处查看我的完整指南:隐藏和显示带动画的选项卡栏

隐藏标签栏:

UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.7, options: .curveEaseOut) {
    if let tabBarFrame = self.tabBarController?.tabBar.frame {
        self.tabBarController?.tabBar.frame.origin.y = navigationController.view.frame.maxY + tabBarFrame.height
    }
    navigationController.view.layoutIfNeeded()
} completion: { _ in
    self.tabBarController?.tabBar.isHidden = true
}
Run Code Online (Sandbox Code Playgroud)

显示标签栏:

UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.7, options: .curveEaseOut) {
    if let tabBarFrame = self.tabBarController?.tabBar.frame {
        self.tabBarController?.tabBar.frame.origin.y = navigationController.view.frame.maxY - tabBarFrame.height
    }
    navigationController.view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)

确保layoutIfNeeded()在 内部调用UIView.animate以触发动画更改。


Ron*_*bet 5

斯威夫特 3.

self.tabBarController?.tabBar.isHidden = true
Run Code Online (Sandbox Code Playgroud)