好吧!因此該解決方案(如瑞安的建議)是創建一個一個UIWindow並設置:
self.overlayWindow.windowLevel = UIWindowLevelStatusBar;
這將創建一個狀態欄上面坐着一個窗口。我沒有意識到你可以在任何時候顯示多個UIWindows。這是一個令人難以置信的優雅解決方案。
的一些陷阱:
- 集
self.overlayWindow.hidden = NO
。新窗口默認隱藏。
- 你不需要需要爲新窗口設置一個根視圖控制器。
- 你不需要需要撥打
makeKeyAndVisible
...設置self.overlayWindow.hidden = NO
就夠了。
- 您可以直接將
UIView
子視圖添加到UIWindow
。
您必須保留對self.overlayWindow
的強烈參考。如果它被釋放,UIWindow
將消失(因爲它沒有添加作爲一個子視圖或保留其他地方):
@property (nonatomic, strong) UIWindow *overlayWindow;
- 適應旋轉可能需要一些額外的工作。
我有一點樂趣,並創建了一個類UIWindow
並封裝了設置。在斯威夫特:
class StatusBarOverlay: UIWindow {
init(frame: CGRect) {
super.init(frame: frame)
self.windowLevel = UIWindowLevelStatusBar
self.hidden = false
self.userInteractionEnabled = false
}
}
是的,但它需要管理navigationBar或viewController自己莫名其妙。有些人使用另一個選項,而不是隱藏狀態欄,在疊加層上創建一個新的UIWindow。這可能是一個更順暢的選擇 –