【问题标题】:UIStatusBar appear in black in UITabBarViewController ios11UIStatusBar在UITabBarViewController ios11中显示为黑色
【发布时间】:2017-10-15 20:23:17
【问题描述】:

问题很简单:

  • 应用程序基于UITabBarViewController
  • 控制器中的 3 个选项卡
  • TabBar 视图在 viewDidLoad 中配置为 UITabBarViewController

启动时,UIStatusBar 以黑色背景显示

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

我错过了什么?

【问题讨论】:

  • 您的视图控制器中是否有任何代码可以修改状态栏的外观?
  • @JAL 一个字都没有!
  • 好吧,那我不确定。我遇到了与UITabBar 无关的类似问题。我不确定它是否适用于你,但无论如何我已经添加了一个答案。也许它会帮助遇到这个问题的其他人。

标签: objective-c uitabbarcontroller ios11 uistatusbar


【解决方案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 中设置此更改非常重要。

【讨论】:

  • 具体在哪里? appDidFinishLunching ?
  • @OXXY 是的 - didFinishLaunchingWithOptions
  • 很抱歉,这没有帮助!
  • 这个黑色背景什么时候出现 - 只出现在你的初始屏幕中还是之后出现在你的第一个视图控制器中?
  • 它只在我到达导航控制器时出现,导航控制器是 UITabBarController 中的一个视图。
【解决方案2】:

我遇到了类似的问题。虽然没有直接将 OP 的问题与标签栏相关联,但我也看到我的半透明状态栏似乎变得不透明并且正在向下推视图。

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

问题是在从 Xcode 8 迁移到 9 的过程中,我的一个视图控制器中的一个子视图在 Storyboard 中放错了位置。先前将该视图固定到视图控制器顶部的约束指向错误地指向视图(带边距)而不是顶部布局指南。切换此约束以使用值为 0 的顶部布局指南解决了我的问题。

【讨论】:

  • 我正在使用 Objective C 构建这个项目,并且真正在这个 XCode 上不迁移任何部分!问题再次出现在 TabBarController 内的 navigationControllers 中!
【解决方案3】:

didFinishLaunchingWithOptions 方法中设置状态栏样式为浅色内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[application setStatusBarStyle:UIStatusBarStyleLightContent];

并且在每个 viewController 中返回这个:

-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}

或者,如果您使用的是 UINavigationController,那么还要在每个 viewController(或创建一个 baseViewController)viewWillAppear 方法中添加这行代码

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;

【讨论】:

  • 非常感谢您的回复。我的问题不在于状态栏样式问题在于导航控制器的位置和状态栏的背景。!
【解决方案4】:

对我来说,以下方法有效

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 2014-01-17
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多