// // GlobalImports.swift // KittensTravelNotes // // Created by 100Years on 2025/7/6. // @_exported import Foundation @_exported import UIKit @_exported import SnapKit func k_Height_statusBar() -> CGFloat { var statusBarHeight: CGFloat = 0; if #available(iOS 13.0, *) { let scene = UIApplication.shared.connectedScenes.first; guard let windowScene = scene as? UIWindowScene else {return 0}; guard let statusBarManager = windowScene.statusBarManager else {return 0}; statusBarHeight = statusBarManager.statusBarFrame.height; } else { statusBarHeight = UIApplication.shared.statusBarFrame.height; } return statusBarHeight; } /// ②、顶部安全区高度 k_Height_safeAreaInsetsTop func k_Height_safeAreaInsetsTop() -> CGFloat { if #available(iOS 13.0, *) { let scene = UIApplication.shared.connectedScenes.first; guard let windowScene = scene as? UIWindowScene else {return 0}; // guard:如果 expression 值计算为false,则执行代码块内的 guard 语句。(必须包含一个控制语句: return、 break、 continue 或 throw。)。as?:类型转换,(还有这两种:as、as!) guard let window = windowScene.windows.first else {return 0}; return window.safeAreaInsets.top; } else if #available(iOS 11.0, *) { guard let window = UIApplication.shared.windows.first else {return 0}; return window.safeAreaInsets.top; } return 0; } /// ③、底部安全区高度 func k_Height_safeAreaInsetsBottom() -> CGFloat { if #available(iOS 13.0, *) { let scene = UIApplication.shared.connectedScenes.first; guard let windowScene = scene as? UIWindowScene else {return 0}; guard let window = windowScene.windows.first else {return 0}; return window.safeAreaInsets.bottom; } else if #available(iOS 11.0, *) { guard let window = UIApplication.shared.windows.first else {return 0}; return window.safeAreaInsets.bottom; } return 0; } /** 屏幕宽度 */ let k_ScreenWidth = UIScreen.main.bounds.size.width /** 屏幕高度 */ let k_ScreenHeight = UIScreen.main.bounds.size.height /* 导航栏高度 固定高度 = 44.0f */ //let k_Height_NavContentBar :CGFloat = UINavigationBar.appearance().frame.size.height let k_Height_NavBar :CGFloat = 44.0 /** 状态栏高度 */ let k_Height_StatusBar :CGFloat = k_Height_statusBar() /** 状态栏+导航栏的高度 */ let k_Nav_Height: CGFloat = k_Height_NavBar + k_Height_StatusBar /** 底部tabBar栏高度(不包含安全区,即:在 iphoneX 之前的手机) */ let k_TabBar_Height :CGFloat = 49.0 /** 底部导航栏高度(包括安全区),一般使用这个值 */ let k_Height_TabBar :CGFloat = k_Height_safeAreaInsetsBottom() + k_TabBar_Height public func debugPrint(_ messsage: T, file: String = #file, funcName: String = #function, lineNum: Int = #line) { #if DEBUG let fileName = (file as NSString).lastPathComponent print(Date.hmsString + " \(fileName) (\(funcName)): [\(lineNum)]- \(messsage)") #endif } public func dePrint(_ messsage: T) { #if DEBUG print(Date.hmsString + " \(messsage)") #endif } public func kPresentModalVC(target:UIViewController, modelVC:UIViewController, style:UIModalPresentationStyle = .overFullScreen, transitionStyle:UIModalTransitionStyle = .coverVertical, completion: (() -> Void)? = nil){ let navi = TSBaseNavigationC(rootViewController: modelVC) navi.modalPresentationStyle = style navi.modalTransitionStyle = transitionStyle target.present(navi, animated: true,completion: completion) } public func kPushVC(target:UIViewController,modelVC:UIViewController){ modelVC.hidesBottomBarWhenPushed = true target.navigationController?.pushViewController(modelVC, animated: true) } public func appShortVersion() ->String{ let short = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" return short } //设计稿为 375*812 比例,所以比例系数为 375.0/kScreenWidth let kDesignScale = k_ScreenWidth/375.0