我在显示自己的自定义提醒时,正在向我的应用添加新的UIWindow。
在添加此UIWindow之前,我的应用程序隐藏了状态栏,但现在它可见。如何在这个新窗口中以编程方式隐藏状态栏。我已经尝试了所有的东西,但它没有用。
这就是我添加UIWindow的方式:
notificationWindow = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, 1.0, 1.0)];
notificationWindow.backgroundColor = [UIColor clearColor]; // your color if needed
notificationWindow.userInteractionEnabled = NO; // if needed
// IMPORTANT PART!
notificationWindow.windowLevel = UIWindowLevelAlert + 1;
notificationWindow.rootViewController = [UIViewController new];
notificationWindow.hidden = NO; // This is also important!
[notificationWindow addSubview:confettiView];
答案 0 :(得分:5)
您的notificationWindow
有一个rootViewController。因此,将Custom UIViewController实现为rootViewController,并将preferStatusBarHidden方法作为
- (BOOL)prefersStatusBarHidden {
return YES;
}
使用默认UIViewController实例[UIViewController new]
的实例。
答案 1 :(得分:4)
基本上,由于每个UIWindow
彼此独立,您需要告诉每个人您创建了您对状态栏的偏好。
为了以编程方式执行此操作,您必须创建一个具有给定首选项的虚假控制器,以便在取消隐藏新UIWindow
时,状态栏不会在屏幕上显示/隐藏或闪烁
class FauxRootController: UIViewController {
// We effectively need a way of hiding the status bar for this new window
// so we have to set a faux root controller with this preference
override func prefersStatusBarHidden() -> Bool {
return true
}
}
,实现方式如下:
lazy private var overlayWindow: UIWindow = {
let window = UIWindow.init(frame: UIScreen.mainScreen().bounds)
window.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
window.backgroundColor = UIColor.clearColor()
window.windowLevel = UIWindowLevelStatusBar
window.rootViewController = FauxRootController()
return window
}()
答案 2 :(得分:0)
快速4.2答案
创建一个ViewController
类:
class NoStatusBarViewController: UIViewController {
override var prefersStatusBarHidden: Bool {
return true
}
}
在您的UIWindow
类中:
rootViewController = NoStatusBarViewController()
答案 3 :(得分:-1)
您可以使用UIAlertController而不是UIAlertView。
notificationWindow.windowLevel = UIWindowLevelNormal;