iOS12、iOS11膨桥、iOS10蛮浑、iOS9常見(jiàn)適配

iOS12唠叛、iOS11、iOS10沮稚、iOS9常見(jiàn)適配

@(IOS各個(gè)版本適配)

[TOC]

一艺沼、iOS12(Xcode10)

1.1、升級(jí)Xcode10后項(xiàng)目報(bào)錯(cuò)

不允許多個(gè)info.plist

Xcode10是默認(rèn)選中的最新的New Build System(Default)壮虫,在這個(gè)編譯系統(tǒng)的環(huán)境下澳厢,不允許多個(gè)info.plist

解決辦法一:(推薦)

build system切換到 Legacy Build System,換言之就是切換成老的編譯系統(tǒng)囚似,就OK了剩拢。Xcode->File->Project Settings-> Build System -> Legacy Build System.

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

解決辦法二:

刪除其他info.plist文件。

iOS 12移除了libstdc++, 用libc++替代

Xcode10中l(wèi)ibstdc++相關(guān)的3個(gè)庫(kù)(libstdc++饶唤、libstdc++.6徐伐、libstdc++6.0.9)應(yīng)該都是被徹底廢棄了,如果你使用的三方庫(kù)中有依賴募狂,請(qǐng)盡快和提供方溝通办素,告知他們遷移吧。如果自己開(kāi)發(fā)使用祸穷,也盡快考慮遷移的事宜吧性穿。

1.2、iPhone XR不支持3D-Touch

OC檢測(cè)代碼
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

}
復(fù)制代碼
swift檢測(cè)代碼
self.traitCollection.forceTouchCapability == .availible
復(fù)制代碼

二雷滚、iOS11(Xcode9)

2.1需曾、安全區(qū)域(SafeArea)

iOS11為UIViewControllerUIView增加了兩個(gè)新的屬性safeAreaInsetssafeAreaLayoutGuide

  • safeAreaInsets 適用于手動(dòng)計(jì)算.
  • safeAreaLayoutGuide 適用于自動(dòng)布局.
UIViewController中新增:
- (void)viewSafeAreaInsetsDidChange;
UIView中新增:
- (void)viewSafeAreaInsetsDidChange;
復(fù)制代碼

Storyboard使用Safe Area最低只支持iOS9iOS8的用戶就要放棄了

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

當(dāng)UIViewController調(diào)用- (void)viewDidLoad時(shí)它的所有子視圖的safeAreaInsets屬性都等于UIEdgeInsetsZero

viewSafeAreaInsetsDidChange的調(diào)用時(shí)機(jī)如下:

  • 1思犁、viewDidLoad
  • 2、viewWillAppear
  • 3谋减、viewSafeAreaInsetsDidChange
  • 4、viewWillLayoutSubviews
  • 5扫沼、viewDidAppear

只有在調(diào)用viewSafeAreaInsetsDidChange后出爹,才能獲得view以及viewControllerSafeArea(UIEdgeInsets)。因此在viewDidload中根據(jù)SafeArea設(shè)置界面會(huì)有問(wèn)題充甚。

iPhone X:有導(dǎo)航欄的時(shí)候可以+44

豎屏 safeAreaInsets = (top = 44, left = 0, bottom = 34, right = 0)
橫屏 safeAreaInsets = (top = 0, left = 44, bottom = 21, right = 44)
#import "Adaptive11VC.h"
static inline UIEdgeInsets sgm_safeAreaInset(UIView *view) {
    if (@available(iOS 11.0, *)) {
        return view.safeAreaInsets;
    }
    return UIEdgeInsetsZero;
}

@interface Adaptive11VC ()
@end
@implementation Adaptive11VC
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)testSafeArea {
    UIEdgeInsets safeAreaInsets = sgm_safeAreaInset(self.view);
    NSLog(@"safeAreaInsets = %@", NSStringFromUIEdgeInsets(safeAreaInsets));
}
- (void)viewSafeAreaInsetsDidChange {
    [super viewSafeAreaInsetsDidChange];
    [self testSafeArea];
}
@end
復(fù)制代碼

2.2以政、UIScrollView

iOS 11廢棄了UIViewControllerautomaticallyAdjustsScrollViewInsets屬性,新增了contentInsetAdjustmentBehavior屬性伴找,所以當(dāng)超出安全區(qū)域時(shí)系統(tǒng)自動(dòng)調(diào)整了SafeAreaInsets盈蛮,進(jìn)而影響了adjustedContentInset,在iOS11中決定tableView內(nèi)容與邊緣距離的是adjustedContentInset技矮,所以需要設(shè)置UIScrollViewcontentInsetAdjustmentBehavior屬性抖誉。

// 方式一:(不推薦)修改額外的安全區(qū)域
if (@available(iOS 11.0, *)) {
    self.additionalSafeAreaInsets = UIEdgeInsetsMake(-44, 0, 0, 0);
}
else {
    // Fallback on earlier versions
}
// 方式二:(推薦)設(shè)置為不自動(dòng)調(diào)整
if (@available(iOS 11.0, *)) {
    // 作用于指定的UIScrollView
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    // 作用與所有的UIScrollView
    UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
else {
    self.automaticallyAdjustsScrollViewInsets = NO;
}
復(fù)制代碼

2.3殊轴、tableview問(wèn)題

iOS11開(kāi)始UITableView開(kāi)啟了自動(dòng)估算行高estimatedRowHeight``estimatedSectionHeaderHeight estimatedSectionFooterHeight三個(gè)高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension袒炉,如果不實(shí)現(xiàn)-tableView: viewForFooterInSection:-tableView: viewForHeaderInSection:旁理,那么estimatedRowHeight estimatedSectionHeaderHeight estimatedSectionFooterHeight三個(gè)高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension,導(dǎo)致高度計(jì)算不對(duì)我磁,會(huì)產(chǎn)生空白孽文。解決方法是實(shí)現(xiàn)對(duì)應(yīng)方法或吧這三個(gè)屬性設(shè)為0。

2.4夺艰、LocalAuthentication 本地認(rèn)證

本地認(rèn)證框架提供了從具有指定安全策略(密碼或生物學(xué)特征)的用戶請(qǐng)求身份驗(yàn)證的功能芋哭。例如,要求用戶僅使用Face ID或Touch ID進(jìn)行身份驗(yàn)證郁副,可使用以下代碼:

#import <LocalAuthentication/LocalAuthentication.h>
/**
 檢測(cè)TouchID是否可用
 */
- (void)checkBiometrics {
    LAContext *context = [[LAContext alloc] init];
    BOOL success = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                                        error:nil];
    if ( success ) {
        NSLog(@"can use");
    }
    else {
        NSLog(@"can`t use ");
    }
}
/**
 在驗(yàn)證TouchID可用的情況下使用
 */
- (void)excuteBiometrics {
    LAContext *context = [[LAContext alloc] init];
    context.localizedFallbackTitle = @"自定義標(biāo)題";
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:@"為什么使用TouchID寫(xiě)這里"
                      reply:^(BOOL success, NSError * _Nullable error) {
        if ( success ) {
            // 指紋驗(yàn)證成功
        }
        else {
            switch (error.code) {
                case LAErrorUserFallback:{
                    NSLog(@"用戶選擇輸入密碼");
                    break;
                }
                case LAErrorAuthenticationFailed:{
                    NSLog(@"驗(yàn)證失敗");
                    break;
                }
                case LAErrorUserCancel:{
                    NSLog(@"用戶取消");
                    break;
                }
                case LAErrorSystemCancel:{
                    NSLog(@"系統(tǒng)取消");
                    break;
                }
                // 以下三種情況如果提前檢測(cè)TouchID是否可用就不會(huì)出現(xiàn)
                case LAErrorPasscodeNotSet:{
                    break;
                }
                case LAErrorTouchIDNotAvailable:{
                    break;
                }
                case LAErrorTouchIDNotEnrolled:{
                    break;
                }
                default:
                    break;
            }
        }
    }];
}
復(fù)制代碼

2.5减牺、啟動(dòng)圖的適配

方法一:通過(guò)LaunchScreen.storyboard方式啟動(dòng)

方法二:使用Assets中的LaunchImage

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

  • 給Brand Assets添加一張1125*2436大小的圖片
    • 打開(kāi)Assets.xcassets文件夾,找到Brand Assets
    • 右鍵Show in Finder
    • 添加一張1125*2436大小的圖片
  • 修改Contents.json文件,添加如下內(nèi)容
{
    "extent" : "full-screen",
    "idiom" : "iphone",
    "subtype" : "2436h",
    "filename" : "1125_2436.png",
    "minimum-system-version" : "11.0",
    "orientation" : "portrait",
    "scale" : "3x"
}
復(fù)制代碼

2.6存谎、定位相關(guān)

在 iOS 11 中必須支持 When In Use 授權(quán)模式(NSLocationWhenInUseUsageDescription)拔疚,在 iOS 11 中,為了避免開(kāi)發(fā)者只提供請(qǐng)求 Always 授權(quán)模式這種情況既荚,加入此限制稚失,如果不提供When In Use 授權(quán)模式,那么 Always 相關(guān)授權(quán)模式也無(wú)法正常使用恰聘。

如果要支持老版本墩虹,即 iOS 11 以下系統(tǒng)版本,那么建議在 info.plist 中配置所有的 Key(即使 NSLocationAlwaysUsageDescription 在 iOS 11及以上版本不再使用):

NSLocationWhenInUseUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription  // 為 iOS 11 中新引入的一個(gè) Key憨琳。
復(fù)制代碼

2.7、iOS11中 UIKit’s Bars 上的變化

三旬昭、iOS10(Xcode8)

3.1篙螟、(Why?Safe问拘!)插件取消

Xcode8取消了三方插件(很多優(yōu)秀的插件遍略,本來(lái)可以顯著提高效率)的功能,使用Extension代替 Xcode 8 Extension 推薦

3.2骤坐、證書(shū)問(wèn)題

為了方便用戶來(lái)管理绪杏,提供Automatically manage signing。需要輸入開(kāi)發(fā)者賬號(hào)纽绍!如果沒(méi)有賬號(hào)也沒(méi)關(guān)系蕾久,在下面也可以選擇DebugRealease拌夏、inHouse模式下對(duì)應(yīng)的證書(shū)也可以僧著!

3.3履因、隱私數(shù)據(jù)訪問(wèn)問(wèn)題

iOS10,蘋(píng)果加強(qiáng)了對(duì)隱私數(shù)據(jù)的保護(hù)盹愚,要對(duì)隱私數(shù)據(jù)權(quán)限做一個(gè)適配栅迄,iOS10調(diào)用相機(jī),訪問(wèn)通訊錄皆怕,訪問(wèn)相冊(cè)等都要在info.plist中加入權(quán)限訪問(wèn)描述毅舆,不然之前你們的項(xiàng)目涉及到這些權(quán)限的地方就會(huì)直接crash掉。


解決辦法: 只需要在info.plist添加NSContactsUsageDescriptionkey, value自己隨意填寫(xiě)就可以,這里列舉出對(duì)應(yīng)的key(Source Code模式下):

<key>NSPhotoLibraryUsageDescription</key><string>App需要您的同意,才能訪問(wèn)相冊(cè)</string>

<key>NSCameraUsageDescription</key><string>App需要您的同意,才能訪問(wèn)相機(jī)</string>

<key>NSMicrophoneUsageDescription</key><string>App需要您的同意,才能訪問(wèn)麥克風(fēng)</string>

<key>NSLocationUsageDescription</key><string>App需要您的同意,才能訪問(wèn)位置</string>

<key>NSLocationWhenInUseUsageDescription</key><string>App需要您的同意,才能在使用期間訪問(wèn)位置</string>

<key>NSLocationAlwaysUsageDescription</key><string>App需要您的同意,才能始終訪問(wèn)位置</string>

<key>NSCalendarsUsageDescription</key><string>App需要您的同意,才能訪問(wèn)日歷</string>

<key>NSRemindersUsageDescription</key><string>App需要您的同意,才能訪問(wèn)提醒事項(xiàng)</string>

<key>NSMotionUsageDescription</key><string>App需要您的同意,才能訪問(wèn)運(yùn)動(dòng)與健身</string>

<key>NSHealthUpdateUsageDescription</key><string>App需要您的同意,才能訪問(wèn)健康更新 </string>

<key>NSHealthShareUsageDescription</key><string>App需要您的同意,才能訪問(wèn)健康分享</string>

<key>NSBluetoothPeripheralUsageDescription</key><string>App需要您的同意,才能訪問(wèn)藍(lán)牙</string>

<key>NSAppleMusicUsageDescription</key><string>App需要您的同意,才能訪問(wèn)媒體資料庫(kù)</string>
復(fù)制代碼
隱私數(shù)據(jù) 對(duì)應(yīng)key值
相冊(cè) NSPhotoLibraryUsageDescription
相機(jī) NSCameraUsageDescription
麥克風(fēng) NSMicrophoneUsageDescription
位置 NSLocationUsageDescription
在使用期間訪問(wèn)位置 NSLocationWhenInUseUsageDescription
始終訪問(wèn)位置 NSLocationAlwaysUsageDescription
日歷 NSCalendarsUsageDescription
提醒事項(xiàng) NSRemindersUsageDescription
運(yùn)動(dòng)與健身 NSMotionUsageDescription
健康更新 NSHealthUpdateUsageDescription
健康分享 NSHealthShareUsageDescription
藍(lán)牙 NSBluetoothPeripheralUsageDescription
媒體資料庫(kù) NSAppleMusicUsageDescription

3.4愈腾、跳轉(zhuǎn)到app內(nèi)的隱私數(shù)據(jù)設(shè)置頁(yè)面

iOS 10 干掉了所有系統(tǒng)設(shè)置的 URL Scheme憋活,這意味著你再也不可能直接跳轉(zhuǎn)到系統(tǒng)設(shè)置頁(yè)面(比如 WiFi、蜂窩數(shù)據(jù)顶滩、定位等)余掖。

跳轉(zhuǎn)方式

方式一:prefs:root=某項(xiàng)服務(wù) 適用于 小于 iOS10的系統(tǒng); NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];


方式二:prefs:root=bundleID 適用于 大于等于iOS8系統(tǒng)礁鲁,小于iOS10的系統(tǒng) NSURL *url = [NSURL URLWithString:@"prefs:root=bundleID"];


方式三:UIApplicationOpenSettingsURLString 適用于 大于等于iOS8的系統(tǒng) NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

// iOS系統(tǒng)版本 >= 10.0
{
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
return;
// iOS系統(tǒng)版本 >= 10.0
// But! 不建議這樣做哦盐欺,官方文檔中說(shuō)過(guò):
// `URL is now considered a private API and use will result in app rejection`.
// 雖然是有可能躲過(guò)蘋(píng)果的檢測(cè),但是蘋(píng)果如果發(fā)現(xiàn)你這樣用了仅醇,app上架是有被拒的風(fēng)險(xiǎn)的.
{
    NSURL *url = [NSURL URLWithString:@"APP-Prefs:root=WIFI"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:url 
                                               options:@{} 
                                     completionHandler:nil];
        } else {
            // Fallback on earlier versions
        }
    }
}
// iOS系統(tǒng)版本 < 10.0
{
    NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
復(fù)制代碼

跳轉(zhuǎn)目的地

  • iOS系統(tǒng)版本 <= iOS7 , 只能跳轉(zhuǎn)到 系統(tǒng)設(shè)置頁(yè)面
  • iOS系統(tǒng)版本 >= iOS8 冗美,支持跳轉(zhuǎn)到第三方應(yīng)用的設(shè)置界面中。使用prefs:root=bundleID ,bundleID是你第三方應(yīng)用工程的唯一ID
  • iOS系統(tǒng)版本 >= iOS10析二,支持跳轉(zhuǎn)到自己應(yīng)用設(shè)置粉洼,不支持跳轉(zhuǎn)到系統(tǒng)設(shè)置

3.5、字體變化

蘋(píng)果的默認(rèn)字體會(huì)隨著iOS系統(tǒng)版本的不同而不同叶摄,iOS10中字體變大了属韧。導(dǎo)致了原來(lái)的顯示有問(wèn)題,會(huì)造成...的出現(xiàn)蛤吓。暫時(shí)沒(méi)有好的解決辦法宵喂,需要自己在一個(gè)個(gè)適配一下!

3.6会傲、UICollectionViewCell的的優(yōu)化

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> 在iOS 10 之前,cell只能從重用隊(duì)列里面取出,再走一遍生命周期,并調(diào)用cellForItemAtIndexPath創(chuàng)建或者生成一個(gè)cell.

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> 在iOS 10 中,系統(tǒng)會(huì)cell保存一段時(shí)間,也就是說(shuō)當(dāng)用戶把cell滑出屏幕以后,如果又滑動(dòng)回來(lái),cell不用再走一遍生命周期了,只需要調(diào)用willDisplayCell方法就可以重新出現(xiàn)在屏幕中了.

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10 中,系統(tǒng)是一個(gè)一個(gè)加載cell的,二以前是一行一行加載的,這樣就可以提升很多性能;

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10 新增加的Pre-Fetching預(yù)加載

3.7锅棕、UIRefreshControl

在iOS 10 中, UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脫離了UITableViewController.現(xiàn)在RefreshControl是UIScrollView的一個(gè)屬性.

3.8、UserNotifications(用戶通知)

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10所有相關(guān)通知被統(tǒng)一到了UserNotifications.framework框架中淌山。增加了撤銷(xiāo)裸燎、更新、中途還可以修改通知的內(nèi)容泼疑。通知不在是簡(jiǎn)單的文本了德绿,可以加入視頻、圖片,自定義通知的展示等等脆炎。

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10相對(duì)之前的通知來(lái)說(shuō)更加好用易于管理梅猿,并且進(jìn)行了大規(guī)模優(yōu)化,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是一件好事秒裕。

  • <input checked="" disabled="" type="checkbox" style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; overflow: visible; box-sizing: border-box; padding: 0px;"> iOS 10開(kāi)始對(duì)于權(quán)限問(wèn)題進(jìn)行了優(yōu)化袱蚓,申請(qǐng)權(quán)限就比較簡(jiǎn)單了(本地與遠(yuǎn)程通知集成在一個(gè)方法中)。

四几蜻、iOS9(Xcode7)

4.1喇潘、Bitcode

Xcode7 默認(rèn)啟用 Bitcode,但是如果我們用到的第三方庫(kù)編譯時(shí)還沒(méi)啟用 Bitcode梭稚,主工程就會(huì)編譯不過(guò)颖低。Bitcode 是蘋(píng)果 App Thinning 的機(jī)制之一,可以減少安裝包的大小弧烤。App store 會(huì)將這個(gè) Bitcode 編譯為可執(zhí)行的64位或32位程序忱屑。

解決辦法一: 最簡(jiǎn)單的解決辦法是先把 Bitcode 關(guān)掉:把 Build settings - Build Options - Enable Bitcode 改為 NO。

image

<figcaption style="display: block; text-align: center; font-size: 1rem; line-height: 1.6; color: rgb(144, 144, 144); margin-top: 2px;"></figcaption>

解決辦法二: 移除不支持BitCode的平臺(tái)SDK暇昂,或者尋找支持BitCode的替代品莺戒,或者聯(lián)系SDK方支持BitCode。

4.2急波、HTTP 請(qǐng)求失敗

iOS9 默認(rèn)不支持 HTTP 請(qǐng)求从铲,需要改用更安全的 HTTPS(默認(rèn)用 TLS 1.2)。蘋(píng)果還提供了配置澄暮,使得所有安全性更低的網(wǎng)絡(luò)請(qǐng)求也能使用名段,解決方案就是在 info.plist 里面增加以下配置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
復(fù)制代碼

如果復(fù)雜一些,還可以指定白名單域名泣懊,聲明所支持 TLS 的最低版本伸辟。另外需要注意的是,即使寫(xiě)了上述配置馍刮,在 HTTPS 頁(yè)面中自娩,HTTP 的 javascript 或 css 不會(huì)被加載,因?yàn)樘O(píng)果認(rèn)為這降低了頁(yè)面的安全性渠退。

4.3、canOpenUrl 限制

canOpenUrl 可以用來(lái)判斷用戶是否安裝了某個(gè) APP脐彩。也許是出于用戶隱私的考慮碎乃,iOS9 上對(duì) canOpenUrl 做了限制,最多只能對(duì) 50 個(gè) scheme 做判斷惠奸。如果是用 Xcode7 編譯梅誓,需要在 plist 里面聲明這些 scheme,沒(méi)有聲明的會(huì)直接返回 NO:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>weixin</string>
    <string>wechat</string>
</array>
復(fù)制代碼

4.4、UIStatusBar的問(wèn)題

iOS9中廢棄的方法

// 修改狀態(tài)欄的樣式為白色
// 'setStatusBarStyle(_:animated:)' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
UIApplication.shared.setStatusBarStyle(.lightContent, animated: true)
// 隱藏狀態(tài)欄
// 'setStatusBarHidden(_:with:)' was deprecated in iOS 9.0: Use -[UIViewController prefersStatusBarHidden]
UIApplication.shared.setStatusBarHidden(true, with: .fade)
復(fù)制代碼

用下面兩個(gè)方法替換

-[UIViewController preferredStatusBarstyle]
-[UIViewController preferredStatusBarHidden]
復(fù)制代碼

參考資料:

iOS12適配

iOS12AdaptationTips

關(guān)于iPhone X 的適配

iOS11適配iPhoneX總結(jié)

iOS 10 適配知識(shí)點(diǎn)總結(jié)

聊聊iOS 10更新以后跳轉(zhuǎn)系統(tǒng)設(shè)置的幾種方式

iOS 10 調(diào)用系統(tǒng)"設(shè)置"里的功能(全)

iOS TouchID驗(yàn)證和Keychain結(jié)合使用

iOS10AdaptationTips

適配iOS9

微信 iOS 9 適配總結(jié)

iOS9AdaptationTips

?著作權(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)離奇詭異埂陆,居然都是意外死亡苛白,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)焚虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)购裙,“玉大人,你說(shuō)我怎么就攤上這事鹃栽□锫剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵民鼓,是天一觀的道長(zhǎng)薇芝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摹察,這世上最難降的妖魔是什么恩掷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮供嚎,結(jié)果婚禮上黄娘,老公的妹妹穿的比我還像新娘。我一直安慰自己克滴,他們只是感情好逼争,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著劝赔,像睡著了一般誓焦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上着帽,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天杂伟,我揣著相機(jī)與錄音,去河邊找鬼仍翰。 笑死赫粥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的予借。 我是一名探鬼主播越平,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼频蛔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了秦叛?” 一聲冷哼從身側(cè)響起晦溪,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挣跋,沒(méi)想到半個(gè)月后三圆,有當(dāng)?shù)厝嗽跇?shù)林里發(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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望周循。 院中可真熱鬧强法,春花似錦、人聲如沸湾笛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嚎研。三九已至蓖墅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間临扮,已是汗流浹背论矾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(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)容

  • 深度網(wǎng)絡(luò)的退化問(wèn)題 網(wǎng)絡(luò)的深度對(duì)模型的性能至關(guān)重要关霸,當(dāng)增加網(wǎng)絡(luò)層數(shù)后传黄,網(wǎng)絡(luò)就可以進(jìn)行提取更復(fù)雜的特征,所以當(dāng)模型更...
    zidea閱讀 967評(píng)論 0 3
  • 早上經(jīng)過(guò)洗漱后队寇,我們來(lái)到操場(chǎng)上集合膘掰。 狼牙教官先讓我們軍姿端正,再跟我們說(shuō):“今天我們來(lái)學(xué)習(xí)拍拍操佳遣。他自己演了...
    吳旭輝閱讀 169評(píng)論 0 0
  • 和醫(yī)生約的今天拔牙 其實(shí)對(duì)拔牙一直有心理陰影识埋,一直怕去 可是智齒不拔么,時(shí)不時(shí)痛一下零渐,而且它太大 臉都變寬了窒舟。一直...
    HOHO_ec7b閱讀 146評(píng)論 0 0
  • 剛抄寫(xiě)了一個(gè)半小時(shí),真好诵盼; 晚上在公司呆到十點(diǎn)多才走惠豺,慢下來(lái)處理一些事,靜下來(lái)思考风宁,真好洁墙。
    恒心者閱讀 165評(píng)論 1 1