在某些情况下,iOS 7上的标签栏上缺少背景。见屏幕截图:
我已经将UITabBarController子类化,并按模式呈现我的子类:
[self.navigationController presentViewController:tabBarController animated:NO completion:nil];
有时候,虽然很少见,但背景并没有出现在我的标签栏上,我可以看到它。没有半透明的观点 - 只是透明度......
我使用优秀的Reveal app进行了调试,发现当我观察到问题时,运行时UITabBar中缺少_UITabBarBackgroundView(它应该是UITabBar的子视图)。如果值得注意的话,当缺少背景时,UITabBar也会丢失UIImageView。
我很茫然。什么可能导致标签栏缺少_UITabBarBackgroundView子视图?
答案 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"]];