【问题标题】:Status bar color throughout the app整个应用程序的状态栏颜色
【发布时间】:2015-04-15 03:52:40
【问题描述】:

我正在使用AppDelegate.swift 中的以下代码为状态栏添加透明外观:

   statusBar = UIView(frame: CGRectMake(0, 0, self.window!.frame.width, 20))
   statusBar!.backgroundColor = someTransparentColor // customized UIColor
   self.window!.rootViewController!.view.addSubview(statusBar!)

这是我的应用程序的结构:

      X    Y
      |    |
      NC   NC
      |    |
NC -> A -> B -> C       (NC = Navigation Controller)

以上代码适用于视图 A、B、C;但不适用于 X 和 Y(这是因为我将 statusBar 子视图添加到了 rootViewController)。我能做些什么使它也适用于 X 和 Y?当然,我可以在每个视图控制器中复制该代码,但我不想避免这种情况!

注意:我让 X 和 Y 使用单独的导航控制器,因为我以模态方式呈现它们,并且 NC 使添加导航栏/工具栏变得容易,特别是因为它们是 UITableViewControllers使用静态表。

【问题讨论】:

  • 为什么不使用 UIView 子类,例如我的状态栏视图?现在它可以配置自己,你可以在你想要的地方使用它。
  • 这是一个有趣的建议!问题是我也在检测 AppDelegate 中的方向变化,并将其从超级视图中删除。如果我使用子类,有没有办法做到这一点?大概self.removeFromSuperView 左右。无论如何,感谢您的建议!我正在调查!
  • @matt ,这种方式消除了一些代码重复,尽管在每个未直接连接到根的视图控制器或 tableviewcontroller 中,我必须手动添加纵向模式的视图并以横向模式删除。我可以在子类中处理的删除部分,但是以纵向模式添加视图仍然需要在每个 viewController 中处理。所以仍然有很多相同的代码被重复..!
  • 那你为什么不继承 UINavigationController 并在整个过程中使用该子类,以便在任何需要导航控制器的地方,你的子类都可以处理添加这个额外的视图?
  • 确实如此,但其中一些是 UITableViewControllers,有些是 UICollectionViewControllers。所以我必须对每一个都进行超类化。可能不值得努力!我想知道为什么没有简单的方法可以直接改变状态栏的颜色!

标签: ios iphone swift ios8 uistatusbar


【解决方案1】:

转到您的应用程序 info.plist

  1. View controller-based status bar appearance 设置为NO
  2. Status bar style 设置为UIStatusBarStyleLightContent

然后转到您的应用程序的 AppDelegate 并将以下代码粘贴到您设置 Windows 的 RootViewController 的位置。

#define IS_OS_5_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0)
#define IS_OS_6_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)
#define IS_OS_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
#define IS_OS_8_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

if (IS_OS_6_OR_LATER)
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0)];
    view.backgroundColor = [UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多