一尘不染

在iOS 8的Apple Status Bar上方显示UIView

swift

我知道已经发布了一些与此有关的问题,但是没有一个问题对我的特定问题有所帮助。我想在整个屏幕上方显示自定义模式,但是我想保持Apple状态栏可见。对于模态,我将一个UIView用于调光效果,将另一个用于与用户进行交互的实际视图。然后将整个模态作为子视图添加到当前视图,并置于最前面。本质上,除了自定义视图外,我试图复制UIAlertView的行为。这是我的一些代码:

var modalView:UIView = UIView(frame: self.view.window!.bounds)
modalView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.66)
modalView.addSubview(customView)

self.view.window!.addSubview(modalView)
modalView.window!.windowLevel = UIWindowLevelStatusBar + 1

self.bringSubviewToFront(modalView)

上面customView是与UIView用户交互的对象。

这很好用,但是由于某种原因,即使状态栏的样式设置为LightContent,Apple状态栏上的文本也只会消失。从代码中可以看出,我没有触摸状态栏。

我正在尝试使状态栏上的文本变暗,就像屏幕的其余部分一样,目前卡住了。有谁对我如何获得期望的行为有任何见解?

任何帮助将不胜感激!


阅读 321

收藏
2020-07-07

共1个答案

一尘不染

编辑(2015年11月16日)

我从下面的这个线程复制我的答案:

此答案在iOS 8.3+和iOS 8的早期版本中均无效。我不建议任何人使用它,特别是因为不能保证在将来的iOS版本中都可以使用它。

我的新解决方案使用的标准presentViewController方法UIViewController。我初始化UIViewController,将自定义模态添加View为的子视图UIViewController,然后选择View使用约束定位模态。奇迹般有效!


原始答案

遵循Anna的建议,我使用a UIWindow代替了UIView.Here,这是我的新代码:

var modalWindow:UIWindow = UIWindow(frame: self.view.window!.bounds)

modalWindow.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.66)
modalWindow.hidden = false
modalWindow.windowLevel = (UIWindowLevelStatusBar + 1)

modalWindow.addSubview(customView)

modalWindow.makeKeyAndVisible()

现在它可以像以前一样正常工作,除了Apple状态栏上的文本也变暗了。非常感谢您提供的所有帮助!

2020-07-07