7

我正在开发一个具有用于显示 TabBar 的 UITabBarController 的 iOS 应用程序。在某些地方,我展示了一个隐藏 tabBar 的 modalView 全屏。

我想检测我的 tabBar 何时对用户可见。有什么方法可以自动检查de tabBar 是否可见?

我试过了:

但它真的不起作用,因为 tabBar 并没有真正隐藏。

if ([[[appdelegate tabBarController] tabBar] isHidden])
{
    NSLog(@"tabBar IS HIDDEN");
}
else
{
    NSLog(@"tabBar IS VISIBLE");
}

我在 BaseViewController 中编写此代码,它是我的模态视图和我项目的其他视图的超类。

谢谢。

4

8 回答 8

6

检查这[[[self tabBarController] tabBar] isHidden]很好,但在一种情况下它会失败。如果您在该视图中没有标签栏(根本没有),则[self tabBarController]返回nil,因此调用 isHidden 将返回 NO,这是事实,但您必须检测到其他情况。它不是隐藏的,但它不会退出,除了检查你应该添加[self tabBarController] != nil. 所以基本上:

if([self tabBarController] && ![[[self tabBarController] tabBar] isHidden]){
    //is visible
} else {
    //is not visible or do not exists so is not visible
}
于 2014-05-26T12:46:24.230 回答
5

你可以试试这个

if ([[[self tabBarController] tabBar] isHidden]){

    NSLog(@"tabBar IS HIDDEN");
}
else
{
    NSLog(@"tabBar IS VISIBLE");
}
于 2013-08-13T12:37:13.220 回答
3

这可能是最简单的方法:(假设您不直接使用视图)

将被推送到 navigationController 的 ViewController 有一个属性 hidesBottomBarWhenPushed。只需检查视图控制器中是否为“是”,您就知道标签栏是否隐藏。

于 2016-01-07T13:42:29.883 回答
2

用Swift 3/4+回答

if
  let tabBarController = self.tabBarController,
  !tabBarController.tabBar.isHidden {
  // tabBar is visible
} else {
  // tabBar either is not visible or does not exist
}
于 2017-07-16T08:52:58.397 回答
1

似乎当您present modally在 TabBarController 上使用 VC 时,该tabBar.isHidden属性仍然是false. 因此,为这种情况添加一些备份代码就可以了。

private func isTabBarVisible() -> Bool {
    var isTabBarVisible = false
    if let tabBarController = navigationController?.tabBarController, tabBarController.tabBar.isHidden {
        isTabBarVisible = true
    }
    if let navigationController = navigationController, navigationController.hidesBottomBarWhenPushed {
        isTabBarVisible = true
    }
    if isModal() {
        isTabBarVisible = true
    }
    print(" tabBar visible: \(isTabBarVisible)")
    return isTabBarVisible
}

private func isModal() -> Bool {
    if presentingViewController != nil { return true }
    if navigationController?.presentingViewController == navigationController { return true }
    if (tabBarController?.presentingViewController as? UITabBarController) != nil { return true }
    return false
}

我已经找到了检查 VC 是否已在这篇文章中以模态方式呈现的方法:https ://stackoverflow.com/a/23620377/7468486 ,所以我的回答基本上是两者的混合。

于 2021-04-12T12:58:41.280 回答
1

我在 Swift 中使用它:

tabBarController?.tabBar.isHidden ?? true

我用它来查找标签栏高度:

var tabBarHeight: CGFloat {
    if tabBarController?.tabBar.isHidden ?? true { return 0 }
    return tabBarController?.tabBar.bounds.size.height ?? 0
}
于 2017-07-20T15:46:30.633 回答
-1

检查 的window属性tabBar。此属性设置为不可见nil时。UIView

if((BOOL)[[[self tabBarController] tabBar] window])
{
    // visible
}
else
{
    // not visible
}
于 2014-05-26T13:55:11.593 回答
-1

你可以用这个检查

if let tabBarController = self.tabBarController, !tabBarController.hidesBottomBarWhenPushed, !tabBarController.tabBar.isHidden {
  print("tab bar visible")
} else { 
  print("tab bar hidden")
}
于 2019-11-24T07:56:29.503 回答