在iOS 8的Apple Status Bar上显示UIView
我知道有一些关于这方面的问题,但没有人帮助我处理我的具体问题。 我想在整个屏幕上方显示一个自定义模式,但我想保持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状态栏上的文本也会消失。 从代码中可以看出,我不会触摸状态栏。
我试图让状态栏上的文字变暗,就像屏幕的其他部分一样,现在我被卡住了。 有没有人有任何见解我如何能得到所需的行为?
任何帮助将不胜感激!
编辑(2015年11月16日)
我从以下线索复制我的答案:
这个答案在iOS 8.3+以及可能以前版本的iOS 8中都会中断。我不build议任何人使用它,特别是因为它不能保证在未来的iOS版本中工作。
我的新解决scheme使用UIViewController
的标准presentViewController
方法。 我初始化一个UIViewController
,添加我的自定义模式View
作为UIViewController
的子视图,然后可选地使用约束来定位模态View
。 奇迹般有效!
原始答复
遵循Anna的build议,我通过使用UIWindow
而不是UIView.
这是我的新代码:
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状态栏上的文本也变暗。 非常感谢您的帮助!
2017年12月更新•Swift 4•iOS 10.0+
我简单地尝试了接受的答案的编辑解决scheme,但我不能轻易地做一个UIView横幅整个viewController。 但是,通过访问UIApplication
的statusBar
值,我能够将一个UIView作为子视图添加到statusBarView
。 这将把UIView放在状态栏的顶部。 据我所知,这是一个相对稳定的解决方法,适用于最新的几个iOS版本。
extension UIApplication { /// Returns the status bar UIView var statusBarView: UIView? { return value(forKey: "statusBar") as? UIView } }
用法
let customBannerView = CustomStatusView(with: message) UIApplication.shared.statusBarView?.addSubview(customBannerView)