iOS11 與 iPhone X適配的那些坑

前言:最近更新XCode9,出現(xiàn)了一些問題,寫篇文章來記錄一下,也方便大家排坑.

無奈(nao chou)就給(yao)了兩天時間做適配,時間緊任務(wù)重控乾,一些細(xì)節(jié)的小問題就不一一舉例了

筆鋒一轉(zhuǎn)崎脉,進(jìn)入主題撬碟。


目錄 問題列表

1.XCode9添加資源文件不能獲取路徑問題

2.iOS11 系統(tǒng)導(dǎo)航欄上自定義view的顯示問題

3.UITableView 出現(xiàn)的遮擋顯示問題(三行代碼解決,放到基類)

4.適配iPhoneX 屏幕原則

5.適配過程一些常量的設(shè)置

6.出現(xiàn)UIScrollview 漂移問題(基本都是iPhoneX上)

7.iPhone X 上運(yùn)行有黑色區(qū)域問題

8.有些導(dǎo)致iPhoneX獲取網(wǎng)絡(luò)狀態(tài)崩潰的問題

9.一些關(guān)于iPhone X底部的設(shè)計示范

10.關(guān)于iPhoneX的home條(HomeIndicator)的顯隱

11.關(guān)于iOS11權(quán)限的變化

12.iOS11 UICollectionview 的scroll indicator等被組視圖遮擋的問題

13.iOS11 無法彈出鍵盤問題

14.iOS11 數(shù)組語法糖??替換方法的改變


1. XCode9添加資源文件不能獲取路徑問題

XCode9調(diào)用[[NSBundle mainBundle] pathForResource:resourceNameofType:nil];方法來獲取文件路徑,返回為nil. 添加正確方式如下圖1,

圖1? 添加資源選項

但是XCode9 卻埋了一道坑,如下圖2, 點擊資源文件,找到文件選項

圖2? 資源文件選項

紅框區(qū)域未默認(rèn)勾選, 只要把這個復(fù)選框勾選即可解決.? 具體原因是:xcode9 添加文件使用addfile 拖拽的文件不會自動添加到Compile Sources 和 Copy Bundle Resources 下.

這招太辣眼睛


2. iOS11 系統(tǒng)導(dǎo)航欄上自定義view的顯示問題

之前代碼設(shè)置導(dǎo)航欄:

self.navigationItem.titleView = customView;

會出現(xiàn)這樣的問題底靠,如下圖3害晦,

圖3 導(dǎo)航欄出錯


界面出亂的原因是因為iOS11調(diào)整了導(dǎo)航欄圖層結(jié)構(gòu)∈钪校快速簡便的修改方式壹瘟,直接上代碼,

self.navigationItem.hidesBackButton = YES;
[self.navigationController.navigationBaraddSubview:YourCustomView];

但是需在控制器的dealloc里移除你的自定義view痒芝,

[YourCustomView removeFromSuperview]; 

下圖4為修改好的自定義視圖

圖4


3. UITableView 出現(xiàn)的遮擋顯示問題(三行代碼解決俐筋,放到基類)

// iOS11適配
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

4. 適配iPhoneX 屏幕原則

圖5 iphoneX 豎屏
圖6 iPhoneX 橫屏

設(shè)計原則:讓那行可操作、不可阻擋的控件或視圖顯示在圖5严衬、圖6的藍(lán)色區(qū)域(安全區(qū)域safeArea)澄者。

頂部危險區(qū)距離:44

底部危險區(qū)距離:34

5. 適配過程一些常量的設(shè)置

#define YYISiPhoneX [[UIScreen mainScreen] bounds].size.width >=375.0f && [[UIScreen mainScreen] bounds].size.height >=812.0f&& YYIS_IPHONE
#define YYIS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
//狀態(tài)欄高度
#define kStatusBarHeight? ? (CGFloat)(YYISiPhoneX?(44):(20))
// 導(dǎo)航欄高度
#define kNavBarHBelow7? ? ? (44)
// 狀態(tài)欄和導(dǎo)航欄總高度
#define kNavBarHAbove7? ? ? (CGFloat)(YYISiPhoneX?(88):(64))
// TabBar高度
#define kTabBarHeight? ? ? (CGFloat)(YYISiPhoneX?(49+34):(49))
// 頂部安全區(qū)域遠(yuǎn)離高度
#define kTopBarSafeHeight? (CGFloat)(YYISiPhoneX?(44):(0))
// 底部安全區(qū)域遠(yuǎn)離高度
#define kBottomSafeHeight? (CGFloat)(YYISiPhoneX?(34):(0))
// iPhoneX的狀態(tài)欄高度差值
#define kTopBarDifHeight? ? (CGFloat)(YYISiPhoneX?(24):(0))

整個服務(wù)器都在瑟瑟發(fā)抖


6. 出現(xiàn)UIScrollview 漂移問題(基本都是iPhoneX上)

若是UIScrollview的frame和contentSize高度或者寬度一致卻還導(dǎo)致了漂移問題,可用以下一行代碼搞定请琳。

if(@available(iOS11,*)) {_scrollView.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;}

同時粱挡,如果在push進(jìn)入webview頁面時,底部會有黑邊一閃而過俄精,也可用此方法解決询筏。再加個同時,如果發(fā)現(xiàn)pop界面的時候tableview會出現(xiàn)下滑的漂移竖慧,也可用此方法解決嫌套。

若嫌麻煩,每個scrollview及其子類都要去設(shè)置的話圾旨,也可以使用以下方法

// AppDelegate 里進(jìn)行全局設(shè)置
if(@available(iOS 11.0, *)){[[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

7. iPhone X 上運(yùn)行有黑色區(qū)域問題

啟動圖問題踱讨,使用LaunchScreen來做啟動圖 或者 修改Assets中的LaunchImage,添加iPhoneX的Launch圖1125*2436(px) 豎屏模式砍的。

8.有些導(dǎo)致iPhoneX獲取網(wǎng)絡(luò)狀態(tài)崩潰的問題

直接上代碼痹筛,無需通過KVC得到圖層名獲取網(wǎng)絡(luò)狀態(tài),一勞永逸!(因還不熟悉markdown語法帚稠,以下代碼需自行縮進(jìn)

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
+ (NSString *)getNetWorkInfo {
? ? NSString *strNetworkInfo = @"No Network";
? ? struct sockaddr_storage zeroAddress;
? ? bzero(&zeroAddress,sizeof(zeroAddress));
? ? zeroAddress.ss_len = sizeof(zeroAddress);
? ? zeroAddress.ss_family = AF_INET;
// Recover reachability flags
? ? SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL,(struct sockaddr *)&zeroAddress);
? ? SCNetworkReachabilityFlags flags;
//獲得連接的標(biāo)志? ?
? ? BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability,&flags);
? ? CFRelease(defaultRouteReachability);
//如果不能獲取連接標(biāo)志谣旁,則不能連接網(wǎng)絡(luò),直接返回
? ? if(!didRetrieveFlags){ return strNetworkInfo;} ????BOOL isReachable = ((flags & kSCNetworkFlagsReachable)!=0); BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired)!=0); if(!isReachable || needsConnection) {return strNetworkInfo;}// 網(wǎng)絡(luò)類型判斷
? ? if((flags & kSCNetworkReachabilityFlagsConnectionRequired)== 0){strNetworkInfo = @"WIFI";}? ?
? ? if(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0) { if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0){strNetworkInfo = @"WIFI";}}
? ? if ((flags & kSCNetworkReachabilityFlagsIsWWAN) ==kSCNetworkReachabilityFlagsIsWWAN) {if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;if (currentRadioAccessTechnology) {if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {strNetworkInfo =? @"4G";} else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyGPRS]) {strNetworkInfo =? @"2G";} else {strNetworkInfo =? @"3G";}}} else {if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {strNetworkInfo = @"2G";} else {strNetworkInfo = @"3G";}}}}}
? ? // if ([strNetworkInfo isEqualToString: @"No Network"]) {strNetworkInfo = @"WWAN";}
? ? return strNetworkInfo;
}

9.一些關(guān)于iPhone X底部的設(shè)計示范

示范圖一


示范圖二


示范圖三


10. 關(guān)于iPhoneX的home條(HomeIndicator)的顯隱

先看下圖7滋早,

圖7 橫屏看撩妹視頻時

這樣的體驗其實是不好的(還怎么用英文撩妹?)榄审,所以為了以防這樣的問題出現(xiàn),蘋果其實提供了隱藏HomeIndicator的方法馆衔,如下瘟判,

- (BOOL)prefersHomeIndicatorAutoHidden {
? return YES;
}

在VC 里邊重寫 prefersHomeIndicatorAutoHidden 返回 YES(默認(rèn)是NO)怨绣,Home指示條就能自動隱藏了角溃,此方法是在控制器push之后就會回調(diào),屏幕若無交互事件響應(yīng)時篮撑,延遲2秒左右會自動隱藏减细。

11. 關(guān)于iOS11權(quán)限的變化

1.定位問題:無法定位,第一次使用時沒有彈出定位請求對話框赢笨。

原因:由于iOS11的定位權(quán)限的key做了更改未蝌,在以前iOS11之前的始終允許定位NSLocationAlwaysUsageDescription基礎(chǔ)上添加NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUsageDescription。具體參考博客:http://blog.csdn.net/dangyalingengjia/article/details/77965029

2.相冊權(quán)限問題:iOS11上讀寫相冊的照片時發(fā)生崩潰茧妒。

原因:由于iOS11相冊相關(guān)權(quán)限的key發(fā)生了變化萧吠。用戶在沒有權(quán)限的情況下,訪問相冊導(dǎo)致崩潰桐筏。

iOS11之前對應(yīng)的key是NSPhotoLibraryUsageDescription纸型,而iOS11的Key變?yōu)镹SPhotoLibraryAddUsageDescription。同定位的Key一樣梅忌,由于key沒有兼容性狰腌,所以需要保留原key以兼容iOS11之前的版本。

12. iOS11 UICollectionview 的scroll indicator等被組視圖遮擋的問題

問題如下圖8紅框區(qū)域,

圖8?UICollectionview bug圖

導(dǎo)致這個的原因是因為組視圖的z坐標(biāo)出現(xiàn)了問題, 有以下兩種解決辦法

第一種: 在該類中重寫layoutSubviews方法<適用于小規(guī)模>

- (void)layoutSubviews {
? ? [super layoutSubviews];
? ? self.layer.zPosition = 0;
}

第二種: 自定義一個layer牧氮, 重寫其zPosition的get方法琼腔。然后對組視圖類添加分類方法,重寫layerClass方法即可踱葛。

自定義layer:

@implementation YYZPositionZeroLayer

- (CGFloat)zPosition {
? ? return 0;
}
@end

添加分類重寫組視圖layerClass方法:

@implementationUICollectionReusableView (ZPositionZero)
+ (Class)layerClass {
? return[YYZPositionZeroLayer class];
}
@end

13. iOS11 無法彈出鍵盤問題

問題描述: 在某些時候你會發(fā)現(xiàn)調(diào)用becomeFirstResponder方法時,并未響應(yīng)鍵盤,系統(tǒng)鍵盤無法彈出.

問題發(fā)現(xiàn): 如果在調(diào)用之前使用了UIAlertView彈出對話框,就會導(dǎo)致系統(tǒng)鍵盤無法彈出,猜測是因為UIAlertView在消失遍歷window窗口時存在windowLevel 大于 levelNormal 的window把他作為keywindow

問題解決: 如果你的項目里面還在使用UIAlertView(2_0,9_0), 建議用UIAlertController替換掉.

14.iOS11 數(shù)組語法糖??替換方法的改變

在iOS11 之前,

array[i] 語法糖的替換方法是[array objectAtIndex:i]

在iOS11 之后,

array[i] 語法糖的替換方法是[array objectAtIndexedSubscript:i]

用到動態(tài)交換方法的童鞋需要注意了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丹莲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尸诽,更是在濱河造成了極大的恐慌甥材,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逊谋,死亡現(xiàn)場離奇詭異擂达,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門板鬓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲敷,“玉大人,你說我怎么就攤上這事俭令『蟮拢” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵抄腔,是天一觀的道長瓢湃。 經(jīng)常有香客問我,道長赫蛇,這世上最難降的妖魔是什么绵患? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悟耘,結(jié)果婚禮上落蝙,老公的妹妹穿的比我還像新娘。我一直安慰自己暂幼,他們只是感情好筏勒,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旺嬉,像睡著了一般管行。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邪媳,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天捐顷,我揣著相機(jī)與錄音,去河邊找鬼悲酷。 笑死套菜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的设易。 我是一名探鬼主播逗柴,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顿肺!你這毒婦竟也來了戏溺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤屠尊,失蹤者是張志新(化名)和其女友劉穎旷祸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讼昆,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡托享,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闰围。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡赃绊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羡榴,到底是詐尸還是另有隱情碧查,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布校仑,位于F島的核電站忠售,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迄沫。R本人自食惡果不足惜稻扬,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邢滑。 院中可真熱鬧腐螟,春花似錦、人聲如沸困后。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摇予。三九已至,卻和暖如春吗跋,著一層夾襖步出監(jiān)牢的瞬間侧戴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工跌宛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留酗宋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓疆拘,卻偏偏與公主長得像蜕猫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哎迄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 更新中......(部分省略) 10.19已更新10.20已更新11.4 已更新 文章推薦:不可能不愛的 XCOD...
    百草紀(jì)閱讀 2,018評論 0 18
  • 一回右、前言 iOS11發(fā)布也有一段時間了,每次版本升級漱挚,相關(guān)的適配工作當(dāng)然是下個版本的核心工作之一翔烁。而且這次iOS1...
    景銘巴巴閱讀 10,971評論 8 105
  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程旨涝,總的來說整個適配過程不是很麻煩蹬屹。建議觀看今年WWDC...
    iOS駱駝閱讀 2,689評論 1 6
  • 普通感冒: 俗稱“傷風(fēng)”,是最常見的上呼吸道病毒感染,以鼻咽部卡他癥狀為主要表現(xiàn)慨默。常見的病原體為鼻病毒秃踩,也可由副流...
    AMy119閱讀 364評論 2 2
  • 戴上頭盔 調(diào)整后視鏡 嗡~,嗡嗡~业筏,嗡~憔杨,嗡嗡嗡~ 風(fēng)在耳畔呼嘯而過 沿路的樹上長滿雞蛋花 路的盡頭是碧海藍(lán)天。 ...
    陳小童閱讀 342評論 0 1