★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公眾號:山青詠芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/12190314.html
➤如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
UIWindowLevel
關於 UIWindowLevel
我想多說幾句, UIWindow
在顯示的時候會根據 UIWindowLevel
進行排序的,即 Level
高的將排在最前面.默認是 0
open var windowLevel: UIWindowLevel // default = 0.0
系統為我們定義了三個window
層級,即:
1 public let UIWindowLevelNormal: UIWindowLevel 2 public let UIWindowLevelAlert: UIWindowLevel 3 public let UIWindowLevelStatusBar: UIWindowLevel
打印輸出這三個level的值查看下:
1 STWLog("UIWindowLevelNormal: \(UIWindowLevelNormal)") 2 STWLog("UIWindowLevelStatusBar: \(UIWindowLevelStatusBar)") 3 STWLog("UIWindowLevelAlert: \(UIWindowLevelAlert)")
什么是 keWindow
? 我們來查看下官方文檔是怎么描述的:

也就是說在 windows
數組中,最近時間調用了 makeKeyAndVisible
方法的就是 keyWindow
了;
總結:
UIWindowLevel
的值不僅僅只有UIWindowLevelNormal
、UIWindowLevelAlert
、UIWindowLevelStatusBar
這三個,可以是自定義的隨意值,哪怕是負數UIWindow
的顯示的確可以通過UIWindowLevel
來區分優先級,所有的window都會被加在界面上,只不過會通過優先級羅列起來,UIWindowLevel
大的在上面顯示,UIWindowLevel
小的在下面顯示。UIWindowLevel
優先級相等的情況下,看誰后實例化了,誰后實例化誰先顯示- 如果將當前
KeyWindow
對象設置為nil
則該對象會從Windows
數組中移除,並且最后實例化的Window對象將成為KeyWindow
,但是依然遵循總結2中的描述,UIWindowLevel
大的在上面顯示,UIWindowLevel
小的在下面顯示。
示例代碼:
1 //MARK:添加搜索窗體 2 func addWindow(_ controller:UIViewController,_ frame: CGRect) 3 { 4 //窗體大小位置 5 self.window = UIWindow(frame: frame) 6 //窗體綁定的視圖控制器 7 self.window?.rootViewController = controller 8 //背景色透明 9 self.window?.backgroundColor = UIColor.clear 10 //判斷是否為空 11 if self.window != nil 12 { 13 self.window!.windowLevel = UIWindow.Level.alert + 1 14 //不隱藏 15 self.window!.isHidden = false 16 //顯示窗體 17 self.window!.makeKeyAndVisible() 18 //增加對iOS 13的支持代碼 19 if #available(iOS 13.0, *) 20 { 21 if let currentWindowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene { 22 self.window!.windowScene = currentWindowScene 23 } 24 } 25 } 26 }
隱藏窗體屬性:
1 //是否隱藏 2 window?.isHidden = show