swift實現類似宏定義功能,舉例實現safeAreaInsets


//注意:要獲取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())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM