检查tabBar是否在iOS应用上可见

时间:2013-08-13 10:36:03

标签: iphone ios ipad uitabbarcontroller tabbar

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

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

我试过了:

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

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

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

感谢。

8 个答案:

答案 0 :(得分:7)

检查此[[[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
}

答案 1 :(得分:4)

你可以试试这个

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

    NSLog(@"tabBar IS HIDDEN");
}
else
{
    NSLog(@"tabBar IS VISIBLE");
}

答案 2 :(得分:1)

回答 Swift 3/4 +

if
  let tabBarController = self.tabBarController,
  !tabBarController.tabBar.isHidden {
  // tabBar is visible
} else {
  // tabBar either is not visible or does not exist
}

答案 3 :(得分:1)

我在Swift中使用它:

tabBarController?.tabBar.isHidden ?? true

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

var tabBarHeight: CGFloat {
    if tabBarController?.tabBar.isHidden ?? true { return 0 }
    return tabBarController?.tabBar.bounds.size.height ?? 0
}

答案 4 :(得分:1)

似乎当您通过 TabBarController present modally 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,所以我的回答基本上是两者的混合。

答案 5 :(得分:0)

这可能是最简单的方法:(假设您没有直接观看视图)

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

答案 6 :(得分:0)

您可以检查

<div>
              {items.map((value, index) => {
              return (<div className="note" key = {index}>{value.title}</div>);
              })}
</div>

答案 7 :(得分:-1)

检查window的{​​{1}}属性。 <{1}}当tabBar不可见时,此属性设置为nil

UIView