iOS 7 TabBar半透明问题

时间:2014-01-07 18:41:19

标签: iphone objective-c ios7 uitabbar

我有一个问题,当我在TabBar上设置半透明盒子时,有些东西阻挡了我的一些观点。

它看起来像是一种额外的标签栏,或者我甚至都不知道。我正在使用故事板。

请参阅附件中的图片:

半透明(OFF - NO):

With Translucent (OFF - NO)

使用半透明(ON或YES):

With Translucent (ON or YES)

有人知道为什么会这样吗?

谢谢

PS:你喜欢哪个tabBar?黑色还是这个:

enter image description here

6 个答案:

答案 0 :(得分:74)

当您将tabBar.translucent设置为NO时,会在iOS7中发生这种情况。 iOS正试图变得聪明并说“嘿,tabbar不是半透明的,所以我们最好把所有东西都放在它上面”。通过将标签控制器内部的导航控制器内的视图控制器的extendedLayoutIncludesOpaqueBars属性设置为YES来修复它。

示例(实际上没有运行):

UITabBarController *tabBarController = [[UITabBarController alloc] init];
tabBarController.tabBar.barStyle = UIBarStyleBlack;
tabBarController.tabBar.translucent = NO;

UIViewController *viewController = [[UIViewController alloc] init];
viewController.extendedLayoutIncludesOpaqueBars = YES; // <-- This is important!!!!!!

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: viewController];

tabBarController.viewControllers = @[navigationController];

来源:https://web.archive.org/web/20160405135605/https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

顺便说一句,我最喜欢非半透明的tabbar。

修改

正如Andy在下面提到的,这个标志不必在代码中设置。如果你使用的话,你可以在IB中设置它。

答案 1 :(得分:10)

如上所述here,您必须将barTintColor设置为您想要更改颜色的内容。

  

为barStyle设置任何样式或为barTintColor设置任何自定义颜色时,这些设置会自动应用。如果您愿意,可以通过以编程方式将半透明属性设置为NO来使标签栏不透明。在这种情况下,如果标签栏具有UIBarStyleBlack样式,则条形使用黑色绘制不透明背景;如果标签栏具有UIBarStyleDefault,则条形图绘制白色;如果定义了自定义值,则使用标签栏的barTintColor。

我用于项目的东西

self.tabBarController.tabBar.barTintColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];

self.tabBarController.tabBar.translucent = NO;

答案 2 :(得分:6)

我有一个带有TableView的控制器和半透明的NavigationBar和半透明的TabBar。
在这种情况下使用
viewController.extendedLayoutIncludesOpaqueBars = YES;

会导致两个条重叠在我的桌面视图中的问题。

可以通过设置
viewController.edgesForExtendedLayout = UIRectEdgeBottom;

来管理,这导致TableView仅隐藏在标签栏后面。

答案 3 :(得分:2)

看起来你已经设置了视图控制器的视图,使其底部位于与标签栏顶部相同的位置,当它位于屏幕底部时。如果您这样做,那么您的内容是否会正确显示(内容可通过标签栏显示)标签栏是否设置为半透明。

答案 4 :(得分:1)

对于那些实际上想要的半透明Tabbar和桌面视图(或者我的集合视图)可以在后面看到的人,这是我的ios 7/8解决方案:

如果您正在使用约束,则应在表格视图底部添加一个约束到&#34;底部布局指南&#34;所以你的tableview在Tabbar之前停止。这是Storyboard的一个例子,但它也可以在代码中完成 enter image description here
然后你只需要通过设置&#34; clipsToBounds&#34;来确保你仍然可以看到Tabbar后面的表格视图。财产到NO。

self.mytableview.clipsToBounds = NO;

这是我的解决方案,希望它有所帮助。

答案 5 :(得分:0)

我认为当前接受的答案不正确。您不需要 扩展不透明条下面的布局即可解决此问题。

OP中没有提供代码,但是包含项目的视图底部可能被限制在其超级视图的底部,这将使这些项目位于半透明的标签栏下方。为避免这种情况,可以从底部设置手动插入。简而言之,超级视图在半透明条的下方延伸,其子视图也在其下方。

选项卡栏不透明后,根视图(或超级视图)仅会扩展到选项卡栏的顶部。

“更多”正确的解决方法是只删除手动插入的内容,而不是在不透明的条形下扩展视图。