在iOS11中,UITabBarViewController中的UIStatusBar会显示为黑色。

11

问题很简单:

  • 应用程序基于UITabBarViewController
  • 控制器中有3个标签
  • UITabBarViewController的viewDidLoad中配置TabBar视图

启动时,UIStatusBar呈现黑色背景颜色 Launch Status Bar

切换到任何标签后,UIStatusBar会变色!

Correct Status Bar

我错过了什么?


你在视图控制器中有修改状态栏外观的代码吗? - JAL
@JAL 没有一句话! - OXXY
嗯,那我就不确定了。我遇到过一个与 UITabBar 无关的类似问题。虽然我不确定它是否适用于你,但我还是添加了一个答案。也许它会帮助其他遇到这个问题的人。 - JAL
4个回答

1

几个月前我也遇到了类似的问题 - 我通过在我的AppDelegate中添加以下代码解决了它。请查看下面的swift代码,我相信你知道objective-c语法:

    // Setup general NavBar appearance
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
    UINavigationBar.appearance().isTranslucent = true
    UINavigationBar.appearance().tintColor = UIColor.white
    UIApplication.shared.statusBarStyle = .lightContent // => this would be the solution

我认为最后一行代码会对你很有意思。在你的AppDelegate中设置这些更改非常重要。


{btsdaf} - OXXY
{btsdaf} - AlexWoe89
{btsdaf} - OXXY
这个黑色背景是什么时候出现的 - 只在启动画面中出现还是在第一个视图控制器中也会出现? - AlexWoe89
只有在我到达 UITabBarController 中的一个 View NavigationController 时才会出现。 - OXXY

0

我曾经遇到过类似的问题。虽然与 OP 的选项卡栏问题没有直接关系,但我也发现我的半透明状态栏似乎变成了不透明,并且将视图向下推。

在将我的项目从 Swift 3 和 Xcode 8 迁移到 Swift 4 和 Xcode 9 后,我开始遇到同样的问题,即当状态栏可见时,它似乎会将内容向下推。起初,我以为这是我设置的首选 UIStatusBarStyle 的问题(我使用的是 UIStatusBarStyleLightContent),但它的工作是正确的。

问题在于,在从 Xcode 8 到 9 的迁移中,一个视图控制器中的子视图在 Storyboard 中被放错了位置。之前将该视图固定在视图控制器顶部的约束指向了 View(带边距),而不是顶部布局指南。将此约束更改为使用顶部布局指南并将值设置为 0 解决了我的问题。

Storyboard


我正在使用Objective C构建这个项目,而且在XCode上没有迁移任何部分!问题再次出现在TabBarController内的navigationControllers中! - OXXY

0
didFinishLaunchingWithOptions 方法中将状态栏样式设置为浅色内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[application setStatusBarStyle:UIStatusBarStyleLightContent];

并且在每个视图控制器中返回这个:

-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}

或者如果您正在使用UINavigationController,则还需要在每个viewController(或创建一个baseViewController)的viewWillAppear方法中添加此行代码

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;

{btsdaf} - OXXY

0

对我来说,以下方法是有效的

final class StatusbarStyle {
    static let shared = StatusbarStyle()
    var style:UIStatusBarStyle = .default
}

然后每当我需要更改状态栏颜色时,我写以下内容:

StatusbarStyle.shared.style = .default
navigationController?.setNeedsStatusBarAppearanceUpdate()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接