iPhone X你真的適配了嗎倦春?

tableView的約束我是這樣寫的:

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(myAddressLabel.mas_bottom);
make.left.right.bottom.mas_offset(0);
}];

tableView滾動的時候是這種效果:

效果.gif

但是當tableView滾動到最底部的時候汽绢,最后一個cell被擋住了:

home_indicator擋住了cell的內(nèi)容

于是我針對iOS 11調(diào)整了一下約束:

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.mas_equalTo(myAddressLabel.mas_bottom);

make.left.right.mas_offset(``0``);

if (@available(iOS ``11.0``, *)) {

make.bottom.mas_equalTo(self.view.mas_safeAreaLayoutGuideBottom);

} else``{

make.bottom.mas_equalTo(self.view);

}

}];

|

OK淤击,現(xiàn)在就不會擋住最后一個cell了:

home_indicator不會擋住cell的內(nèi)容

但是滾動tableView的時候又尷尬了:


尷尬.gif

對比這張GIF與上一張GIF画恰,可以發(fā)現(xiàn)這里根本沒有體現(xiàn)iPhone X全面屏的優(yōu)勢策肝。

對比這張GIF與上一張GIF,可以發(fā)現(xiàn)這里根本沒有體現(xiàn)iPhone X全面屏的優(yōu)勢椭微。

真正的適配iPhone X,是滾動的時候全屏滾動(如第一張GIF)盲链,滾到底的時候最后一個cell也不會被home_indicator擋住蝇率。

寫了個demo研究

為了方便弄清問題我新建了一個小demo,demo里我并沒有對約束做什么特殊處理:

UITableView *tableView = [[UITableView alloc] init];

[self.view addSubview:tableView];

tableView.dataSource = self;

tableView.delegate = self;

[tableView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.mas_offset(NAVIGATION_BAR_HEIGHT);

make.left.right.bottom.mas_offset(``0``);

}];

|

demo的效果:

[圖片上傳中...(image-9c76fa-1517633860840-6)]

demo.gif

這才是我想要的效果肮粽础本慕!

我很疑惑,同樣的約束代碼我用在項目里怎么就不對了侧漓。

當初為了適配iOS 11锅尘,你做了什么?

后來我把這個問題發(fā)到群里布蔗,我同學問我是不是用了automaticallyAdjustsScrollViewInsets藤违。

這個屬性我有用到,但是iOS 11出來后我就沒用了纵揍,我用了另一個:

contentInsetAdjustmentBehavior

iOS 11剛出來的時候顿乒,我發(fā)現(xiàn)項目中的scrollView(及其子類)在iOS 11虛擬機上的偏移量發(fā)生了變化,那個時候關(guān)于適配iOS 11的文章很多泽谨,我也很輕松的找到了解決方案:

  • 在AppDelegate.m中加上這段代碼:

if (@available(iOS ``11``, *)) {

[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

}

scrollView在iOS 11上的偏移問題就解決了璧榄,這段代碼是什么意思我并未研究特漩,只是從其字面意思上感覺它就是讓scrollView不要發(fā)生偏移,但是我并沒意識到它跟安全區(qū)域有關(guān)骨杂。

繞不過的安全區(qū)域

關(guān)于安全區(qū)域的文章有很多了涂身,相信大家就算沒仔細研究過,零散的文章也讀了不少搓蚪,這里給大家推薦一篇:

http://www.reibang.com/p/63c0b6cc66fd

現(xiàn)在來說下[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever和安全區(qū)域的關(guān)系蛤售。

自己翻譯:是否根據(jù)安全區(qū)域調(diào)整偏移量,默認是自動調(diào)整的陕凹。

[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever這句話的意思就是所有scrollView的偏移量不隨安全區(qū)域而調(diào)整悍抑。

這就是項目里的scrollView翻到底的時候最后一個cell會被home_indicator擋住的原因。

又因為contentInsetAdjustmentBehavior的默認值是UIScrollViewContentInsetAdjustmentAutomatic杜耙,所以小demo里tableView自動調(diào)整了偏移量搜骡,因此翻到底的時候最后一個cell不會被home_indicator擋住。

所以要解決項目里的tableView的顯示問題佑女,只需要將這個tableView的contentInsetAdjustmentBehavior改為UIScrollViewContentInsetAdjustmentAutomatic:

if (@available(iOS ``11.0``, *)) {

self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;

}

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.mas_equalTo(myAddressLabel.mas_bottom);

make.left.right.bottom.mas_offset(``0``);

}];

|

修改后.gif

反思

最初適配iPhone X的時候记靡,我的想法很簡單:

iPhone X嘛,無非就是狀態(tài)欄和tabbar的高度發(fā)生了變化团驱,多了一個home_indicator而已摸吠,幾個宏就搞定了:

|

// 判斷是否是iPhone X

#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(``1125``, ``2436``), [[UIScreen mainScreen] currentMode].size) : NO)

// 狀態(tài)欄高度

#define STATUS_BAR_HEIGHT (iPhoneX ? ``44``.f : ``20``.f)

// 導航欄高度

#define NAVIGATION_BAR_HEIGHT (iPhoneX ? ``88``.f : ``64``.f)

// tabBar高度

#define TAB_BAR_HEIGHT (iPhoneX ? (``49``.f+``34``.f) : ``49``.f)

// home indicator高度

#define HOME_INDICATOR_HEIGHT (iPhoneX ? ``34``.f : ``0``.f)

|

憑借這幾個宏,我把導航欄和tabbar高度一改嚎花,然后就想當然的認為完成了iPhone X的適配工作——在別人還在研究安全區(qū)域的時候寸痢。

當然,tableView是這樣的:

不是全面的全面屏.gif

我想的是:home_indicator沒有擋住cell內(nèi)容就是適配完成了紊选。(還好APP的幾個主頁都是有tabbar的啼止,不存在這種問題,不然真的丑爆了兵罢。)

安全區(qū)域是什么献烦?我知道有這個東西,這東西重要嗎卖词?反正也不用(我都用宏解決了)巩那,懶得去管。

事實說明人終將為自己的無知付出代價此蜈。

誠如CepheusSun所說:

在適配 iPhone X 的時候首先是要理解 safe area 是怎么回事即横,盲目的 if iPhoneX{} 只會給之后的工作帶來更多的麻煩。

最后裆赵,再次強調(diào)

真正的適配效果是:

正確姿勢.gif

不是:

home_indicator擋住了最后一個cell.gif

也不是:

這還是全面屏嗎令境?.gif

希望我們都能做一個格物致知的開發(fā)者。

轉(zhuǎn)自 無夜之星辰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顾瞪,一起剝皮案震驚了整個濱河市舔庶,隨后出現(xiàn)的幾起案子抛蚁,更是在濱河造成了極大的恐慌,老刑警劉巖惕橙,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞧甩,死亡現(xiàn)場離奇詭異,居然都是意外死亡弥鹦,警方通過查閱死者的電腦和手機肚逸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彬坏,“玉大人朦促,你說我怎么就攤上這事∷ㄊ迹” “怎么了务冕?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幻赚。 經(jīng)常有香客問我禀忆,道長,這世上最難降的妖魔是什么落恼? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任箩退,我火速辦了婚禮,結(jié)果婚禮上佳谦,老公的妹妹穿的比我還像新娘戴涝。我一直安慰自己,他們只是感情好钻蔑,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布喊括。 她就那樣靜靜地躺著,像睡著了一般矢棚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上府喳,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天蒲肋,我揣著相機與錄音,去河邊找鬼钝满。 笑死兜粘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的弯蚜。 我是一名探鬼主播孔轴,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碎捺!你這毒婦竟也來了路鹰?” 一聲冷哼從身側(cè)響起贷洲,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晋柱,沒想到半個月后优构,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡雁竞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年钦椭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碑诉。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡彪腔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出进栽,到底是詐尸還是另有隱情德挣,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布泪幌,位于F島的核電站盲厌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祸泪。R本人自食惡果不足惜吗浩,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望没隘。 院中可真熱鬧懂扼,春花似錦、人聲如沸右蒲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰妄。三九已至陷嘴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間间坐,已是汗流浹背灾挨。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竹宋,地道東北人劳澄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蜈七,于是被迫代替她去往敵國和親秒拔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 一.iPhone X尺寸問題 1. 高度增加了145pt飒硅,變成812pt. 2.屏幕圓角顯示砂缩,注意至少留10pt邊...
    騎行天下閱讀 12,799評論 5 36
  • iOS 7 之后蘋果給 UIViewController 引入了 topLayoutGuide 和 bottomL...
    IOSCoderYummy閱讀 778評論 0 0
  • 我的朋友圈里有一位95后的姑娘作谚,年紀輕輕的就謀上了一份特別好的工作,可能是名校畢業(yè)梯轻,起點特別高食磕。由于工作的需要,加...
    HedyWang1閱讀 185評論 0 0
  • 首先喳挑,我會很開心地與每一位關(guān)注“穢刊”成長的小伙伴們分享: 從此篇文章開始彬伦,“穢刊”終于擁有“原創(chuàng)”功能,這意味著...
    顏先生Yan閱讀 194評論 0 1
  • 百度上解釋伊诵,人性就是在一定社會制度和一定歷史條件下形成的人的本性单绑。 朋友圈里刷滿了看完電影《釜山行》的真切感受,知...
    張某某T閱讀 528評論 2 4