近日钓瞭,網(wǎng)上瘋傳微信若不支持蘋果暗黑模式怖辆,即將面臨下架處理。有人辟謠丙笋,有人瘋傳雹舀,不管真假芦劣,微信這么強大的團(tuán)隊,想要做個蘋果暗黑模式的兼容應(yīng)該也不是什么問題说榆,但是對于一些小公司的App虚吟,還是要簡單的做一下iOS13的兼容性的,之前因為某第三方SDk的兼容性問題签财,一直用的是iOS12 的SDK打包上傳appStore串慰,但是蘋果要求從 4 月 30 日起,所有提交到 App Store 的 iOS 應(yīng)用都需要使用 iOS 13 SDK 或更高版本構(gòu)建,所以唱蒸,所以使用iOS13SDK勢在必行邦鲫,順便使用暗黑模式測試了一下應(yīng)用,還是發(fā)現(xiàn)有些問題需要處理的神汹。
1.如果App不做暗黑模式的兼容庆捺,需要在Info.plist中添加User Interface Style 并設(shè)置值為Light,這樣App里還是跟原來的的樣式屁魏,如果不添加滔以,很多白色(淺色)的頁面會被系統(tǒng)渲染成暗黑色。
2.狀態(tài)欄的兼容性設(shè)置氓拼,iOS13新增一個UIStatusBarStyleDarkContent醉者,如下:
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // Automatically chooses light or dark content based on the user interface style
UIStatusBarStyleLightContent API_AVAILABLE(ios(7.0)) = 1, // Light content, for use on dark backgrounds
UIStatusBarStyleDarkContent API_AVAILABLE(ios(13.0)) = 3, // Dark content, for use on light backgrounds
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} API_UNAVAILABLE(tvos);
所以需要設(shè)置iOS13狀態(tài)欄為黑色,需要加一個判斷:
if (@available(iOS 13.0, *)) {
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent;
} else {
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
// Fallback on earlier versions
}
3.在iOS13上使用presentViewController進(jìn)行頁面跳轉(zhuǎn)披诗,不會再是全屏的,需要手設(shè)置vc.modalPresentationStyle = 0或者vc.modalPresentationStyle = UIModalPresentationFullScreen;
typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {
UIModalPresentationFullScreen = 0,
UIModalPresentationPageSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
UIModalPresentationFormSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
UIModalPresentationCurrentContext API_AVAILABLE(ios(3.2)),
UIModalPresentationCustom API_AVAILABLE(ios(7.0)),
UIModalPresentationOverFullScreen API_AVAILABLE(ios(8.0)),
UIModalPresentationOverCurrentContext API_AVAILABLE(ios(8.0)),
UIModalPresentationPopover API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(tvos),
UIModalPresentationBlurOverFullScreen API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios) API_UNAVAILABLE(watchos),
UIModalPresentationNone API_AVAILABLE(ios(7.0)) = -1,
UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,
};
4.[UIApplication sharedApplication].keyWindow 被棄用立磁,但是目前在xcode11中還是可以使用的呈队,沒有給出任何警告,App也能正常運行
@property(nullable, nonatomic,readonly) UIWindow *keyWindow API_DEPRECATED("Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes", ios(2.0, 13.0));
但還是用官方建議的方法來訪問比較好:
[[[UIApplication sharedApplication] windows] objectAtIndex:0]
5.iOS13中禁止通過KVC方式來獲取私有屬性唱歧,會造成crash宪摧,其實在iOS13之前使用 [xxx setValue:xxx forKeyPath xxx],經(jīng)常會出現(xiàn)crash粒竖,所以盡量避免使用KVC來訪問私有屬性,對于有些控件可以自定義重寫几于,或者通過tuntime添加自己想要的屬性來滿足需求蕊苗。
6.即將廢棄的 LaunchImage
從2020年4月開始,所有使? iOS13 SDK的 App將必須提供 LaunchScreen沿彭,LaunchImage即將退出歷史舞臺朽砰。可以使用Launch Storyboards來進(jìn)行解決喉刘。
當(dāng)然iOS13還有很多新的改動瞧柔,網(wǎng)上很多大神都列的很詳細(xì),我這里只簡單記錄下對自家App的兼容性適配睦裳,能正常運行造锅,滿足需求就行。