適配iOS15 & Xcode 13

設備升級到iOS15之后,電池條,導航條和底部tabBar的背景色,都成為了透明色,這給了APP設計極大的靈活性,同時也對于全局設計比較統一的APP造成了一定的麻煩。

適配1 - TabBar

適配tabBar非常簡單,只需要在原有代碼之上設置一下背景色即可。

if (@available(iOS 15.0, *)) {
   self.tabBar.backgroundColor = [UIColor whiteColor];
}

// 更多的設置內容可以去探索:UITabBarAppearance。以上內容僅為我的APP適配所需。

適配2 - 導航欄(UINavigationBar)

// 備注:以下內容僅為我的APP適配所需,并非iOS15的內容都在于此。

// 配置iOS15導航條
- (void)configNavigationBarForiOS15 {
    if (@available(iOS 15.0, *)) {
        UINavigationBarAppearance *app = [[UINavigationBarAppearance alloc] init];
        // 不透明背景色
        [app configureWithOpaqueBackground];
        // 設置背景色
        app.backgroundColor = self.barBackgroundColor;
        // 磨砂效果
        app.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleSystemMaterial];
        // 導航條底部分割線圖片(這里設置為透明)
        UIImage *image = [UIImage imageWithColor:UIColor.clearColor size:CGSizeMake(1.0f, 1.0f)];
        app.shadowImage = image;
        // 導航條富文本設置
        app.titleTextAttributes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:17.0f], NSForegroundColorAttributeName : self.barTintColor};
        // 當可滾動內容的邊緣與導航欄的邊緣對齊時,導航欄的外觀設置。
        self.navigationController.navigationBar.scrollEdgeAppearance = app;
        // 標準高度導航條的外觀設置(常規設置)
        self.navigationController.navigationBar.standardAppearance = app;
        // 應用于導航欄背景的色調。
        self.navigationController.navigationBar.barTintColor = self.barBackgroundColor;
        // 應用于導航欄按鈕項的著色顏色。
        self.navigationController.navigationBar.tintColor = self.barTintColor;
    }
}

適配3 - UITableView

我這里的tableView是使用的style是Plain模式,并且是分組顯示的,SectionHeader是需要吸頂顯示。所以升級了iOS15 & Xcode13之后,麻煩比較大。

  • 麻煩1 - SectionHeader的滾動問題:
    • 原來是SectionHeader在滾動時,下面的SectionHeader是推著上面的SectionHeader出屏幕的。
    • 升級后SectionHeader在滾動時,下面的SectionHeader是滾到上面的SectionHeader下面,直到完全占據其位置才顯示。
  • 解決方案
if (@available(iOS 15.0, *)) {self.tableView.sectionHeaderTopPadding = 0;}
  • 麻煩2 - SectionHeader的背景問題:
    • 原來是SectionHeader為透明顯示,占其位而不遮擋其下面的任何內容,升級后SectionHeader為毛玻璃效果,并且在滾動吸頂和滾出屏幕的過程時會發生顏色漸變。
  • 解決方案
if (@available(iOS 14.0, *)) {
   self.backgroundConfiguration = [UIBackgroundConfiguration clearConfiguration];
}

備注:查了一下,該問題應該發生在iOS14時,但是不知道什么原因,在iOS14&Xcode12時,我的APP并沒有發生該問題。

上面就是我這次在升級了iOS15&Xcode13所遇到的問題和解決方案,后續如果還有其他問題會持續更新的。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容