IOS15.0的适配
IOS15.0的適配
環境
XCode13.0
IOS 15.0
在 升級xcode 13.0 之后,正式開始支持 iOS15,就需要做適配 iOS15了,在 xcode 13.0 之前的就不會有什么影響的
UINavigationBar
用新 xcode13 編譯工程后,導航欄的問題比較明顯,調試之后發現是 UINavigationBar 部分屬性的設置在 iOS15 上是無效的
查看導航欄特性 API:UINavigationBarAppearance 后發現,iOS15navigationBar 的相關屬性設置要通過實例 UINavigationBarAppearance 來實現,UINavigationBarAppearance 是 iOS13 更新的 API,應該有人已經在用,我們的應用兼容 iOS10 以上,對于導航欄的設置還沒有使用 UINavigationBarAppearance,如今在 iOS15 上失效,所以對于呈現的問題,做如下適配:
解決方法
主要是以下兩個屬性 (UINavigationController 的屬性)
// 靜止樣式 self.navigationBar.standardAppearance; // 滾動樣式 self.navigationBar.scrollEdgeAppearance; if #available(iOS 13.0, *) {let appearance = UINavigationBarAppearance()// 設置導航欄背景色appearance.backgroundColor = .white// 去除導航欄陰影(如果不設置clear,導航欄底下會有一條陰影線)appearance.shadowColor = UIColor.clear// 字體顏色、尺寸等appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]// 帶scroll滑動的頁面navigationController?.navigationBar.scrollEdgeAppearance = appearance// 常規頁面navigationController?.navigationBar.standardAppearance = appearance } if (@available(iOS 13.0, *)) {UINavigationBarAppearance * appearance = [[UINavigationBarAppearance alloc] init];// 背景色appearance.backgroundColor = [UIColor whiteColor];// 去除導航欄陰影(如果不設置clear,導航欄底下會有一條陰影線)appearance.shadowColor = [UIColor clearColor];// 字體顏色、尺寸等appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};// 帶scroll滑動的頁面self.navigationController.navigationBar.scrollEdgeAppearance = appearance;// 常規頁面self.navigationController.navigationBar.standardAppearance = appearance;}AppDelegate
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-200, 0) forBarMetrics:UIBarMetricsDefault];// iOS 15適配if (@available(iOS 13.0, *)) {UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];[appearance setBackgroundColor:[UIColor whiteColor]];// UINavigationBarAppearance 會覆蓋原有的導航欄設置,這里需要重新設置返回按鈕隱藏,不隱藏可注釋或刪掉appearance.backButtonAppearance.normal.titlePositionAdjustment = UIOffsetMake(-200, 0);[[UINavigationBar appearance] setScrollEdgeAppearance: appearance];[[UINavigationBar appearance] setStandardAppearance:appearance];}UITabbar
tabbar 的問題和 navigationBar 的問題屬于同一類,tabbar 背景顏色設置失效
if #available(iOS 13.0, *) { let appearance = UITabBarAppearance()// 背景色appearance.backgroundColor = .whitetabBar.standardAppearance = appearanceif #available(iOS 15.0, *) {tabBar.scrollEdgeAppearance = appearance}} if (@available(iOS 13.0, *)) { UITabBarAppearance * appearance = [[UITabBarAppearance alloc] init];// 背景色appearance.backgroundColor = [UIColor whiteColor];self.tabBar.standardAppearance = appearance; if (@available(iOS 15.0, *)) {self.tabBar.scrollEdgeAppearance = appearance;}}TableView
iOS 15 的 UITableView 新增了一條新屬性:sectionHeaderTopPadding, 默認會給每一個 section header 增加一個高度,當我們使用 UITableViewStylePlain 初始化 UITableView 的時候,能發現 sectionHeader 增高了 22px。
/// Padding above each section header. The default value is `UITableViewAutomaticDimension`.@available(iOS 15.0, *)open var sectionHeaderTopPadding: CGFloat//iOS 15中tableView會給每一個section的頂部(header以上)再加上一個22像素的高度,形成一個section和section之間的間距 //為了配合以前的開發習慣,我們只需要在創建實例的時候進行對間距的設置即可if #available(iOS 15.0, *) {tableView.sectionHeaderTopPadding = 0}//或者全局設置if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = 0} //為了配合以前的開發習慣,我們只需要在創建實例的時候進行對間距的設置即可if (@available(iOS 15.0, *)) { tableView.sectionHeaderTopPadding = 0;}//或者全局設置 if (@available(iOS 15.0, *)) {[UITableView appearance].sectionHeaderTopPadding = 0;}總結
以上是生活随笔為你收集整理的IOS15.0的适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 2.30.1最新版本的使用
- 下一篇: C语言 位操作简析