添加新 UIWindow 时以编程方式隐藏状态栏?
Posted
技术标签:
【中文标题】添加新 UIWindow 时以编程方式隐藏状态栏?【英文标题】:Programatically Hiding Status Bar When Adding New UIWindow? 【发布时间】:2014-06-02 18:58:02 【问题描述】:在显示我自己的自定义警报时,我目前正在向我的应用添加一个新的 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];
【问题讨论】:
如何隐藏状态栏?我试过“[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];”一切正常。 我试过这样做,但状态栏仍然显示。当我将 windowLevel 更改为 UIWindowStatusBar 时,它会消失,但 UIAlertView 始终位于顶部。 @iwasrobbed 这个问题被标记为 Objective-C,而不是 Swift。请不要更改问题的含义或范围,只是为了让它与您的新答案相匹配。如果您对此问题有答案,可以按照 OP 的要求发布 Objective-C 版本。讨论元:meta.***.com/questions/311285/… 【参考方案1】:本质上,由于每个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】:您的notificationWindow
有一个rootViewController。因此,将 Custom UIViewController 实现为 rootViewController,并使用 preferStatusBarHidden 方法作为
- (BOOL)prefersStatusBarHidden
return YES;
使用默认 UIViewController 实例 [UIViewController new]
.
【讨论】:
【参考方案3】:Swift 4.2 答案
创建一个ViewController
类:
class NoStatusBarViewController: UIViewController
override var prefersStatusBarHidden: Bool
return true
在你的UIWindow
课堂上:
rootViewController = NoStatusBarViewController()
【讨论】:
【参考方案4】:您可以使用 UIAlertController 代替 UIAlertView。
notificationWindow.windowLevel = UIWindowLevelNormal;
【讨论】:
以上是关于添加新 UIWindow 时以编程方式隐藏状态栏?的主要内容,如果未能解决你的问题,请参考以下文章