本文主要分享一下 iOS15 上適配方案罩抗,僅做開(kāi)發(fā)記錄使用铐望,開(kāi)發(fā)過(guò)程中通過(guò)使用陸續(xù)增加捌刮。
iOS15 的適配如庭,很重要的一環(huán)就集中在UINavigationBar和UITabbar方面叹卷。
用新Xcode13編譯工程后,iOS15項(xiàng)目顯示出現(xiàn)視圖問(wèn)題。
iOS15 適配
1骤竹、UINavigationBar
2帝牡、UITabBar
3、TableView
4蒙揣、Image
? UINavigationBar
? 從 iOS 15 開(kāi)始靶溜,UINavigationBar在控制器中關(guān)聯(lián)滾動(dòng)視圖頂部使用;
在iOS15中鸣奔,UINavigationBar默認(rèn)是透明的,有滑動(dòng)時(shí)會(huì)逐漸變?yōu)槟:Ч徒祝梢酝ㄟ^(guò)改變UINavigationBar.scrollEdgeAppearance屬性直接變?yōu)槟:Ч胬辍⑴渲孟嚓P(guān)屬性-背景、字體等
現(xiàn)有問(wèn)題:
用新Xcode13編譯iOS15項(xiàng)目后断楷,導(dǎo)航欄的問(wèn)題比較明顯锨匆,調(diào)試之后發(fā)現(xiàn)是UINavigationBar部分屬性的設(shè)置在iOS15上是無(wú)效的。運(yùn)行起來(lái)后發(fā)現(xiàn)冬筒,導(dǎo)航欄顏色設(shè)置失效恐锣,字體顏色也失效,并且有導(dǎo)航欄陰影黑線(xiàn)舞痰。
查看導(dǎo)航欄的相關(guān)API:
UINavigationBarAppearance
后發(fā)現(xiàn)土榴,iOS15navigationBar的相關(guān)屬性設(shè)置要通過(guò)實(shí)例UINavigationBarAppearance來(lái)實(shí)現(xiàn),UINavigationBarAppearance是iOS13更新的API响牛,應(yīng)該有人已經(jīng)在用玷禽,我們的應(yīng)用兼容iOS10+,對(duì)于導(dǎo)航欄的設(shè)置還沒(méi)有使用UINavigationBarAppearance呀打,如今在iOS15上失效矢赁,所以對(duì)于呈現(xiàn)的問(wèn)題,做如下適配:
// 修改NarBar背景
if (@available(iOS 15.0, *)) {
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
// 背景色
appearance.backgroundColor = [UIColor blueColor];
// 去掉半透明效果
appearance.backgroundEffect = nil;
// 標(biāo)題字體顏色及大小
appearance.titleTextAttributes = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont boldSystemFontOfSize:18],
};
// 設(shè)置導(dǎo)航欄下邊界分割線(xiàn)透明
appearance.shadowImage = [[UIImage alloc] init];
// 去除導(dǎo)航欄陰影(如果不設(shè)置clear贬丛,導(dǎo)航欄底下會(huì)有一條陰影線(xiàn))
appearance.shadowColor = [UIColor clearColor];
// standardAppearance:常規(guī)狀態(tài), 標(biāo)準(zhǔn)外觀撩银,iOS15之后不設(shè)置的時(shí)候,導(dǎo)航欄背景透明
self.navigationBar.standardAppearance = appearance;
// scrollEdgeAppearance:被scrollview向下拉的狀態(tài), 滾動(dòng)時(shí)外觀豺憔,不設(shè)置的時(shí)候额获,使用標(biāo)準(zhǔn)外觀
self.navigationBar.scrollEdgeAppearance = appearance;
}
? UITabBar
? 從 iOS 15 開(kāi)始, UITabBar 在控制器中關(guān)聯(lián)滾動(dòng)視圖底部時(shí)使用UITabBarAppearance.scrollEdgeAppearance配置相關(guān)屬性-背景恭应、字體等
現(xiàn)有問(wèn)題:
用新Xcode13編譯iOS15項(xiàng)目后咪啡,tabbar的問(wèn)題和navigationBar的問(wèn)題屬于類(lèi)類(lèi)似环础,運(yùn)行起來(lái)后發(fā)現(xiàn)茂契,tabbar背景顏色設(shè)置失效,字體顏色也失效缸匪,并且陰影設(shè)置也失效。
可查看TabBar的相關(guān)API:
UITabBarAppearance
后發(fā)現(xiàn)准夷,iOS15的tabBar的相關(guān)屬性設(shè)置要通過(guò)實(shí)例UITabBarAppearance來(lái)設(shè)置钥飞,所以對(duì)于呈現(xiàn)的問(wèn)題,做如下適配:
// 修改tabbar背景
if (@available(iOS 15.0, *)) {
UITabBarAppearance *appearance = [UITabBarAppearance new];
//tabBar背景顏色
appearance.backgroundColor = [UIColor whiteColor];
// 去掉半透明效果
appearance.backgroundEffect = nil;
// tabBaritem title選中狀態(tài)顏色
appearance.stackedLayoutAppearance.selected.titleTextAttributes = @{
NSForegroundColorAttributeName:KColorFromRGB(0x53A2F8),
NSFontAttributeName:[UIFont systemFontOfSize:12],
};
//tabBaritem title未選中狀態(tài)顏色
appearance.stackedLayoutAppearance.normal.titleTextAttributes = @{
NSForegroundColorAttributeName:KColorFromRGB(0x7E7E7E),
NSFontAttributeName:[UIFont systemFontOfSize:12],
};
self.tabBar.scrollEdgeAppearance = appearance;
self.tabBar.standardAppearance = appearance;
}
? TableView
? 從 iOS 15 開(kāi)始衫嵌,TableView 增加sectionHeaderTopPadding
屬性读宙,默認(rèn)情況sectionHeaderTopPadding會(huì)有22個(gè)像素的高度,及默認(rèn)情況楔绞,TableView section header增加22像素的高度
可做如下適配:
if (@available(iOS 15.0, *)) {
self.tableView.sectionHeaderTopPadding = 0;
}
? Image
? 在iOS15中结闸,UIImageWriteToSavedPhotosAlbum存儲(chǔ)圖片之后的回調(diào)不再返回圖片了,會(huì)返回nil酒朵,如果在回調(diào)方法里面操作image有可能會(huì)直接Crash桦锄,目前的解決辦法聲明一個(gè)全局image去記錄,后面再去操作:
self.image = savedImage;
UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
// self.image doing...
}