【iOS開發】防止UIWindow延遲釋放佔用狀態列

KyXu發表於2017-11-23

在展示 app 啟動廣告等情況下,我們可能需要在介面上疊加一個 UIWindow,但是實測情況下發現,由於 UIWindow 會被系統引用導致延遲釋放,在 customWindow 例項被使用完之後,單純

customWindow.rootViewController = [[UIViewController alloc] init];
customWindow = nil;

不能讓 customWindow 完全對當前介面沒有影響的,其中有可能出現的一個問題是:app 使用各個 VC 獨立管理狀態列的方式時,我們通過 [[UIViewController alloc] init] 建立的 VC 是有狀態列的,這是當 app 需要展示的其他 UIWindow 裡面的 VC 沒有狀態列時,customWindow 會浮在最頂層,強行疊加一個狀態列出來(iOS 9 親測)。

這時改 keyWindow 或者設定 windowLevel 都是沒有用的,各種嘗試之後,解決方案是在把 window 設為 nil 之前,加一句 setHidden:

customWindow.rootViewController = [[UIViewController alloc] init];
[customWindow setHidden:YES];
customWindow = nil;

FYI.


相關文章