設備升級到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并沒有發生該問題。