【发布时间】: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