開發中遇到的問題,
iOS14已經發布,記錄一下開發中遇到的問題.不定時更新,歡迎大家評論補充.
iOS14適配總結如下:
1. KVC
iOS14不允許以KVC形式訪問 UIPageControl的pageImage、_currentPageImage
在iOS14下設置UIPageControl的pageimage,會導致奔潰,不能再用了。
if (@available(iOS 14.0,*)) {
pageControl.preferredIndicatorImage = [self imageWithColor:[UIColor whiteColor]];
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
pageControl.pageIndicatorTintColor = [UIColor blueColor];
}else{
[pageControl setValue:[UIImage imageNamed:@"pageControllDot"]forKeyPath:@"pageImage"];
[pageControl setValue:[UIImage imageNamed:@"pageControllCurrent"]forKeyPath:@"currentPageImage"];
}
2. UIDatePicker
xcode12 UIDatePicker 需要加入 preferredDatePickerStyle
,并且DatePickerMode
必須在UIDatePicker
的frame
賦值前賦值
3. tableViewCell
xcode12上cell添加button,不能[self addSubview:self.cellBtn]
需要[self.contentView addSubview:self.cellBtn]
,contentView
的層級被提上來了,self addSubview
會導致button
不響應點擊事件.也可以在添加控件之前提前調用contentView
4. 復制粘貼板
[UIPasteboard generalPasteboard]
發生變更.
獲取粘貼板需要控制下.包括第三方SDK,防止每次打開APP,都會提示粘貼信息.
5.相冊權限
iOS14 新增了Limited Photo Library Access
模式,在授權彈窗中增加了 Select Photo
選項。用戶可以在 App 請求調用相冊時選擇部分照片讓 App 讀取。從 App 的視?來看,你的相冊里就只有這幾張照片,App 無法得知其它照片的存在。
PHAuthorizationStatusLimited
時,如果未進行適配,有可能會在每次觸發相冊功能時都進行彈窗詢問用戶是否需要修改照片權限。
對于這種情況可通過在 Info.plist
中設置PHPhotoLibraryPreventAutomaticLimitedAccessAlert
的值為YES
來阻止該彈窗反復彈出,并且可通過下面這個 API 來主動控制何時彈出PHPickerViewController
進行照片選擇。
具體可以參考文章iOS14 隱私適配及部分解決方案
6. 地理位置權限
新增了 精確定位
和 模糊定位
的概念,用戶可以手動選擇,模糊定位的誤差約 500m 。
可以根據實際功能判斷是否可以接受用戶選擇模糊定位。
如果功能強依賴精確定位,可以在需要的時候調用[CALocationMnanger requestTemporaryFullAccuracyAuthorizationWithPurposeKey:]
單獨請求一次精確定位,用戶可以選擇拒絕授權。
所需參數 purposeKey 需要在 info.plist 中設置 NSLocationTemporaryUsageDescriptionDictionary 字典,key 為 purposeKey , value 為對應的話述。
7. 機型適配
其中iOS14 適配機型包括 iPod touch(7th)、iPhone 6s、iPhone 6s Plus、iPhone SE(2016)、iPhone 7、iPhone 7 Plus、iPhone 8、iPhone 8 Plus、iPhone X、iPhone XR、iPhone XS、iPhone XS Max、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max、iPhone SE(2020)。
8. 畫中畫
iOS14送使用AVplayer進行播放視頻的,都可以支持畫中畫
功能,其實就是一個視頻懸浮窗.我的項目中沒有涉及到,所以大家具體可以參考文章iOS14畫中畫功能實現
9. 廣告標識IDFA權限
iOS14以上系統,需要先請求跟蹤權限,用戶同意后才能獲取到廣告標識。
在info.plist
文件里添加跟蹤權限請求描述文字.
10. 第三方庫的崩潰:
YYWebImage
中 iOS14 YYAnimatedImageView 加載不出圖片
JXCategoryView的崩潰問題
TZImagePickerController需要升級到最新版本
其他第三方.....
11. xcode12 sdk編譯出來的架構沒有x86_64
該問題未驗證:網絡上發現的.copy過來共勉
在xcode更新完,項目里面構建的framework在模擬器運行失敗,報沒有x86_64架構,編譯后通過 lipo -info指令發現只有arm64的架構,沒有x86_64的架構。
12. 新增iPhone12尺寸
iphone12 及 iphone12 pro -------------- 390 * 844
iphone12 pro max --------------- 428 * 926
iphone12 mini --------------- 360 * 780
我們項目里面有的人會根據尺寸判斷機型,比如:
//宏定義
#define kIs_iPhone_X ([[UIScreen mainScreen] bounds].size.height == 812.0 || [[UIScreen mainScreen] bounds].size.height == 896 || [[UIScreen mainScreen] bounds].size.height == 844 || [[UIScreen mainScreen] bounds].size.height == 926 || [[UIScreen mainScreen] bounds].size.height == 780)
// 方法
- (BOOL)is_iPhone_X {
if ([[UIScreen mainScreen] bounds].size.height == 812.0 ||
[[UIScreen mainScreen] bounds].size.height == 896 ||
[[UIScreen mainScreen] bounds].size.height == 844 ||
[[UIScreen mainScreen] bounds].size.height == 780 ||
[[UIScreen mainScreen] bounds].size.height == 926) {
return YES;
} else{
return NO;
}
}
所以我們要做出相應修改
13. UIProgressView高度
在最新的iOS14里面UIProgressView的默認高度發生了變化。高度變高了。
案例:比如我們有一個視頻播放用到了UIProgressView,會發現進度條出現了錯位。需要對iOS14系統下,特殊處理。
14. iOS14.3模擬器bug
在12月份更新最新Xcode后,iOS版本14.3,運行模擬器會發現一個現象:提示框,背景色,導航條顏色等等,都變成了黃色。
這是一個Xcode官方的bug,相信以后會修復掉,現在解決方法是:去除掉所有的外置設備,包括USB,耳機線,充電新等等,重新啟動Xcode模擬器即可!