//注意:要獲取safeAreaInsets最好的辦法是重寫viewSafeAreaInsetsDidChange函數,在里面獲取。因為viewDidLoad之前,safeAreaInsets是0值。並且屏幕也會轉動。 override func viewSafeAreaInsetsDidChange () { print(view.safeAreaInsets.bottom) } //這里以safeAreaInsets舉例建立類似宏定義的東西 //全局的 //建一個.swift文件 //創建常量 let SafeAreaInsets = UIEdgeInsets(top: 44, left: 0, bottom: 34, right: 0) //view.safeAreaInsets要在viewDidLoad之后調用才有正確的值,所以可以寫一個全局常量,默認lazy屬性,延時加載只賦值一次 //注意,常量只會賦值一次,豎屏調用后,轉橫屏,再調用值不會變 let SafeAreaInsets: UIEdgeInsets = { guard #available(iOS 11.0, *), let safeAreaInsets = UIApplication.shared.delegate?.window??.safeAreaInsets else { return UIEdgeInsets() } return safeAreaInsets } () //本頁的 //如果常量很多且是類似的,可以在本頁面建一個私有結構體,定義靜態常量和方法 private struct Constants { //靜態常量 static let SafeAreaInsets = UIEdgeInsets(top: 44, left: 0, bottom: 34, right: 0) static func safeAreaInsets () -> UIEdgeInsets { guard #available(iOS 11.0, *), let safeAreaInsets = UIApplication.shared.delegate?.window??.safeAreaInsets else { return UIEdgeInsets() } return safeAreaInsets } } //調用 print(Constants.SafeAreaInsets, Constants.safeAreaInsets())