iOS13 適配詳細(xì)

對(duì)iOS13 適配的總結(jié)帅刊,下面有些是自己遇到的,有些是收集的漂问,希望能給大家一些思路

  • iOS13中presentViewController的問題
  • iOS不允許valueForKey赖瞒、setValue: forKey獲取和設(shè)置私有屬性,需要使用其它方式修改
  • 黑線處理crash
  • 黑夜模式 審核強(qiáng)制要求適配黑夜模式蚤假。
  • iOS13上獲取DeviceToken
  • App啟動(dòng)過程中栏饮,部分View可能無(wú)法實(shí)時(shí)獲取到frame
  • 狀態(tài)欄(StatusBar)
  • Sign in with Apple -提供第三方登錄
  • 即將廢棄的 LaunchImage
  • MPMoviePlayerController 在iOS 13已經(jīng)不能用了
  • UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
  • UISegmentedControl 選中的顏色
  • 內(nèi)嵌WebView,一些圖片路徑磷仰,文件路徑袍嬉,不用寫絕對(duì)路徑,直接寫文件名字即可芒划,
  • 獲取網(wǎng)絡(luò)狀態(tài)用到KVC的那種方法會(huì)發(fā)生崩潰

  1. 在iOS13中運(yùn)行代碼發(fā)現(xiàn)presentViewController和之前彈出的樣式不一樣冬竟。

會(huì)出現(xiàn)這種情況是主要是因?yàn)槲覀冎皩?duì)UIViewController里面的一個(gè)屬性欧穴,即modalPresentationStyle(該屬性是控制器在模態(tài)視圖時(shí)將要使用的樣式)沒有設(shè)置需要的類型。在iOS13中modalPresentationStyle的默認(rèn)改為UIModalPresentationAutomatic,而在之前默認(rèn)是UIModalPresentationFullScreen泵殴。

ViewController *vc = [[ViewController alloc] init];
vc.title = @"presentVC";
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[self.window.rootViewController presentViewController:nav animated:YES completion:nil];

注意:如果你某個(gè)控制器想使用卡片模式涮帘,需要注意你這個(gè)控制器底部是否有控件⌒ψ纾卡片式的底部的控件容易被遮擋调缨。比方說TZPhotoPickerController 這個(gè)常用的開源相冊(cè)控件。當(dāng)選擇照片時(shí)底部的確定按鈕就被遮擋吆你。無(wú)法選中

  1. 在使用iOS 13運(yùn)行項(xiàng)目時(shí)突然APP就crash掉了弦叶。定位到的問題是在設(shè)置UITextField的Placeholder也就是占位文本的顏色和字體時(shí)使用了KVC的方法:
[_textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
[_textField setValue:[UIFont systemFontOfSize:14] forKeyPath:@"_placeholderLabel.font"];

可將其替換為

_textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"姓名" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14],NSForegroundColorAttributeName:[UIColor redColor]}];

UIsearchBar 使用“ _searchField”崩潰修改方式

  UITextField *searchField;
    if (@available(iOS 13.0, *)) {
       searchField =[self.searchBar valueForKey:@"_searchTextField"];
      }else
      {
          searchField = [ self.searchBar valueForKey:@"_searchField"];
      }
  1. 之前為了處理搜索框的黑線問題會(huì)遍歷后刪除UISearchBarBackground,在iOS13會(huì)導(dǎo)致UI渲染失敗crash;解決辦法是設(shè)置UISearchBarBackground的layer.contents為nil
public func clearBlackLine() {
        for view in self.subviews.last!.subviews {
            if view.isKind(of: NSClassFromString("UISearchBarBackground")!) {
                view.backgroundColor = UIColor.white
                view.layer.contents = nil
                break
            }
        }
    }
  1. 審核強(qiáng)制要求適配黑夜模式妇多。
// 模式強(qiáng)制切換
if (darkMode) {
    if (@available(iOS 13.0, *)) {
        [UIApplication sharedApplication].keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
    }
} else {
    if (@available(iOS 13.0, *)) {
        [UIApplication sharedApplication].keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
    }
在 Info.plist 文件中伤哺,添加 key 為 User Interface Style,類型為 String者祖,value 設(shè)置為 Light 可關(guān)閉黑暗模式立莉。


已知問題

  • YYLabel 如果使用了 textLayout屬性,切換模式的時(shí)候 無(wú)法自動(dòng)修改layout文本的顏色
  • 內(nèi)嵌WebView七问,需要手動(dòng)修改css樣式
  1. iOS13 正確的獲得Devicetoken的代碼如下:
#include <arpa/inet.h>

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    if (![deviceToken isKindOfClass:[NSData class]]) return;
    const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
    NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                          ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                          ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                          ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
    NSLog(@"deviceToken:%@",hexToken);
}

https://developer.umeng.com/docs/66632/detail/126489

  1. 可能是為了優(yōu)化啟動(dòng)速度蜓耻,App 啟動(dòng)過程中,部分View可能無(wú)法實(shí)時(shí)獲取到正確的frame
  2. 狀態(tài)欄(StatusBar)

目前狀態(tài)欄也增加了一種模式械巡,由之前的兩種刹淌,變成了三種, 其中default由之前的黑色內(nèi)容,變成了會(huì)根據(jù)系統(tǒng)模式讥耗,自動(dòng)選擇當(dāng)前展示lightContent還是darkContent有勾。

public enum UIStatusBarStyle : Int {
  case `default` // Automatically chooses light or dark content based on the user interface style

  @available(iOS 7.0, *)
  case lightContent // Light content, for use on dark backgrounds

  @available(iOS 13.0, *)
  case darkContent // Dark content, for use on light backgrounds
}

我們?cè)谑褂玫臅r(shí)候,就可以重寫preferredStatusBarStyle的get方法:

override var preferredStatusBarStyle: UIStatusBarStyle{
    get{
        return .lightContent
    }
}
  1. Sign in with Apple -提供第三方登錄的注意啦

如果你的應(yīng)用使用了第三方登錄葛账,那么你可能也需要加下 「Sign in with Apple」
Sign In with Apple will be available for beta testing this summer. It will be required as an option for users in apps that support third-party sign-in when it is commercially available later this year.

  1. 即將廢棄的 LaunchImage

從 iOS 8 的時(shí)候柠衅,蘋果就引入了 LaunchScreen皮仁,我們可以設(shè)置 LaunchScreen來(lái)作為啟動(dòng)頁(yè)籍琳。當(dāng)然,現(xiàn)在你還可以使用LaunchImage來(lái)設(shè)置啟動(dòng)圖贷祈。不過使用LaunchImage的話趋急,要求我們必須提供各種屏幕尺寸的啟動(dòng)圖,來(lái)適配各種設(shè)備势誊,隨著蘋果設(shè)備尺寸越來(lái)越多呜达,這種方式顯然不夠 Flexible。而使用 LaunchScreen的話粟耻,情況會(huì)變的很簡(jiǎn)單查近, LaunchScreen是支持AutoLayout+SizeClass的眉踱,所以適配各種屏幕都不在話下。
注意啦??霜威,從2020年4月開始谈喳,所有使? iOS13 SDK的 App將必須提供 LaunchScreen,LaunchImage即將退出歷史舞臺(tái)戈泼。

  1. MPMoviePlayerController 在iOS 13已經(jīng)不能用了

10.UISegmentedControl 選中的顏色

 if ( @available(iOS 13.0, *)) {
           self.segmentedControl.selectedSegmentTintColor = [UIColor clearColor];

       }else
       {
           self.segmentedControl.tintColor = [UIColor clearColor];

       }
  1. 內(nèi)嵌WebView婿禽,一些圖片路徑,文件路徑大猛,不用寫絕對(duì)路徑扭倾,直接寫文件名字即可
    http://www.reibang.com/p/767e6f2d8435

12.下面這種獲取網(wǎng)絡(luò)狀態(tài)的方法會(huì)發(fā)生崩潰


 UIApplication *app = [UIApplication sharedApplication];
    NSArray *children = nil;
    // 不能用 [[self deviceVersion] isEqualToString:@"iPhone X"] 來(lái)判斷,因?yàn)槟M器不會(huì)返回 iPhone X
    id statusBar = [app valueForKeyPath:@"statusBar"];
    if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {
        children = [[[statusBar valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
    } else {
        children = [[statusBar valueForKey:@"foregroundView"] subviews];
    }
    NSString *state = [[NSString alloc] init];
    int netType = 0;
    for (id child in children) {
        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
            //獲取到狀態(tài)欄
            netType = [[child valueForKeyPath:@"dataNetworkType"] intValue];
            switch (netType) {
                case 0:
                    state = @"none";
                    break;
                case 1:
                    state = @"2G";
                    break;
                case 2:
                    state = @"3G";
                    break;
                case 3:
                    state = @"4G";
                    break;
                case 5:
                    state = @"WIFI";
                    break;
                default:
                    break;
            }
        }
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挽绩,一起剝皮案震驚了整個(gè)濱河市膛壹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唉堪,老刑警劉巖恢筝,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巨坊,居然都是意外死亡撬槽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門趾撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侄柔,“玉大人,你說我怎么就攤上這事占调≡萏猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵究珊,是天一觀的道長(zhǎng)薪者。 經(jīng)常有香客問我,道長(zhǎng)剿涮,這世上最難降的妖魔是什么言津? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮取试,結(jié)果婚禮上悬槽,老公的妹妹穿的比我還像新娘。我一直安慰自己瞬浓,他們只是感情好初婆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般磅叛。 火紅的嫁衣襯著肌膚如雪屑咳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天弊琴,我揣著相機(jī)與錄音乔宿,去河邊找鬼。 笑死访雪,一個(gè)胖子當(dāng)著我的面吹牛详瑞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臣缀,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坝橡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了精置?” 一聲冷哼從身側(cè)響起计寇,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脂倦,沒想到半個(gè)月后番宁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赖阻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蝶押,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火欧。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棋电,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苇侵,到底是詐尸還是另有隱情赶盔,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布榆浓,位于F島的核電站于未,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陡鹃。R本人自食惡果不足惜烘浦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杉适。 院中可真熱鬧谎倔,春花似錦柳击、人聲如沸猿推。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹬叭。三九已至藕咏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秽五,已是汗流浹背孽查。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坦喘,地道東北人盲再。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓣铣,于是被迫代替她去往敵國(guó)和親答朋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Xcode11 【W(wǎng)WDC2019 Session】Xcode 11新特性Xcode官方文檔 iOS13的特性 眾...
    _Joeyoung_閱讀 5,991評(píng)論 14 61
  • iOS 13 支持適配的機(jī)型 iPhone X棠笑、iPhone XR梦碗、iPhone XS、iPhone XS Max...
    不成活不瘋魔閱讀 43,913評(píng)論 22 131
  • iOS 13 如期而至蓖救,適配工作可以開展起來(lái)啦洪规。在適配 iOS 13 過程中,遇到了如下一些問題循捺。 1. UITe...
    前行哲閱讀 20,198評(píng)論 48 136
  • 我認(rèn)為 愛國(guó)首先要發(fā)自內(nèi)心斩例, 其次是表現(xiàn)在語(yǔ)言中, 最后落實(shí)在行動(dòng)上从橘。 我們不能空談愛國(guó)樱拴, 也不能激進(jìn)地愛國(guó), 從...
    樂陵君閱讀 456評(píng)論 0 2
  • 2018年1月19日洋满,我?guī)е鴨畏磥?lái)到了北京晶乔,第一次的北京之旅,總有些迷茫牺勾,焦躁正罢,當(dāng)然,幸虧有陪伴我的人兒驻民。 迷迷糊...
    Mr凱先森閱讀 194評(píng)論 0 2