为什么我的标签栏上缺少背景?

时间:2013-11-26 19:29:17

标签: ios objective-c

在某些情况下,iOS 7上的标签栏上缺少背景。见屏幕截图:

enter image description here

我已经将UITabBarController子类化,并按模式呈现我的子类:

[self.navigationController presentViewController:tabBarController animated:NO completion:nil];

有时候,虽然很少见,但背景并没有出现在我的标签栏上,我可以看到它。没有半透明的观点 - 只是透明度......

我使用优秀的Reveal app进行了调试,发现当我观察到问题时,运行时UITabBar中缺少_UITabBarBackgroundView(它应该是UITabBar的子视图)。如果值得注意的话,当缺少背景时,UITabBar也会丢失UIImageView。

我很茫然。什么可能导致标签栏缺少_UITabBarBackgroundView子视图?

8 个答案:

答案 0 :(得分:8)

根据文档,除了窗口的根视图控制器之外,不应该使用标签栏控制器:

  

部署标签栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。

假设在某些情况下以模态方式呈现它会产生一些意想不到的副作用,这并不是不合理的。使用标签栏作为应用程序的根控制器时,您是否见过这个问题?

我的屏幕截图中显示了“隐形”标签栏,但只有在设置背景图片时我试图变得聪明,但您已经说过代码没有发生这种情况。

答案 1 :(得分:3)

在黑暗中拍摄:你是否覆盖了layoutSubviews而没有调用super?

答案 2 :(得分:1)

尝试将此添加到您的AppDelegate:

    [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"bottombar_iOS7"]];
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"bottomBarSelectionIndicator_iOS7"]];

答案 3 :(得分:1)

确保您对presentViewController的调用是在主线程上完成的吗? 如果没有,你可能会有类似你的怪异行为。

答案 4 :(得分:1)

 // Below code will work for iOS 6.0,7.0
 // Put this code in your appDelegate.m in didFinishLaunchingWithOptions: 
//before writing any other code

UIImage *tabBackground = [[UIImage imageNamed:@"tab_bg"]
                          resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UITabBar appearance] setBackgroundImage:tabBackground];
[[UITabBar appearance] setSelectionIndicatorImage:
 [UIImage imageNamed:@"tab_select_indicator"]];

步骤1:你需要设置所需的背景 - 从ios 7它需要是半透明的,每个标签图像需要比ios 6更薄,以获得ios 7的最佳外观和感觉 - 你可以设置不同的图像集ios 6和ios 7通过代码检测


步骤2:您需要在选择时设置图像 - 根据ios 6获得一致的外观和ios 7使用不同的图像集

答案 5 :(得分:0)

你可以尝试设置背景图片并强制[tabBar setTranslucent:NO]看看会发生什么

答案 6 :(得分:0)

尝试设置

tabBarController.tabBar.translucent = NO;
tabBarController.tabBar.barStyle = UIBarStyleBlack;
ios 7标签栏中的

是默认的半透明。

答案 7 :(得分:0)

这是我的项目中有用的东西。在AppDelegate的didFinishLaunchingWithOptions:方法的末尾添加以下代码:

// Avoid appearance proxy and set background image directly
UITabBarController *controller = (UITabBarController *)self.window.rootViewController;
[[controller tabBar] setBackgroundImage:[UIImage imageNamed:@"tab-bar-bg.png"]];