ios11 新特性適配總結(jié)(持續(xù)更新中)

開發(fā)遇到親身體驗(yàn)纳寂,總結(jié)此文共享與廣大開發(fā)者淘讥,希望你更快解決bug圃伶。
ios11變化做大的要輸導(dǎo)航欄

一. UITableView的改動(dòng)
1.組間距和contentInset錯(cuò)亂
因?yàn)閕OS11中 UIViewController 的 automaticallyAdjustsScrollViewInsets 屬性被廢棄了,因此當(dāng)tableView超出安全區(qū)域時(shí)蒲列,系統(tǒng)自動(dòng)會(huì)調(diào)整SafeAreaInsets值窒朋,進(jìn)而影響adjustedContentInset值

/ 有些界面以下使用代理方法來設(shè)置,發(fā)現(xiàn)并沒有生效
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

// 這樣的原理是因?yàn)橹爸皇菍?shí)現(xiàn)了高度的代理方法蝗岖,卻沒有實(shí)現(xiàn)View的代理方法侥猩,iOS10及以前這么寫是沒問題的,iOS11開啟了行高估算機(jī)制引起的bug抵赢,因此有以下幾種解決方法:

// 解決方法一:添加實(shí)現(xiàn)View的代理方法
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return nil;
}
// 解決方法二:直接使用tableView屬性進(jìn)行設(shè)置,修復(fù)該UI錯(cuò)亂
self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 5;

[_optionTableView setContentInset:UIEdgeInsetsMake(-35, 0, 0, 0)];

// 解決方法三:添加以下代碼關(guān)閉估算行高
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

2.separatorInset 擴(kuò)展
iOS 7 引入separatorInset屬性欺劳,用以設(shè)置 cell 的分割線邊距,在 iOS 11 中對(duì)其進(jìn)行了擴(kuò)展铅鲤』幔可以通過新增的UITableViewSeparatorInsetReference枚舉類型的separatorInsetReference屬性來設(shè)置separatorInset屬性的參照值。

typedef NS_ENUM(NSInteger, UITableViewSeparatorInsetReference) {  
   UITableViewSeparatorInsetFromCellEdges,   //默認(rèn)值邢享,表示separatorInset是從cell的邊緣的偏移量
   UITableViewSeparatorInsetFromAutomaticInsets  //表示separatorInset屬性值是從一個(gè)insets的偏移量
}

3.Table Views 和 Safe Area
需要注意點(diǎn):
(1)separatorInset 被自動(dòng)地關(guān)聯(lián)到 safe area insets鹏往,因此,默認(rèn)情況下骇塘,表視圖的整個(gè)內(nèi)容避免了其根視圖控制器的安全區(qū)域的插入伊履。
(2)UITableviewCell 和 UITableViewHeaderFooterView的 content view 在安全區(qū)域內(nèi);因此你應(yīng)該始終在 content view 中使用add-subviews操作款违。
(3)所有的 headers 和 footers 都應(yīng)該使用UITableViewHeaderFooterView唐瀑,包括 table headers 和 footers、section headers 和 footers插爹。

二.UINavigationBar和UIToolBar的大改動(dòng)
1.導(dǎo)航欄上添加按鈕:
iOS11以前是直接把按鈕加到了UINavigationBar上面哄辣,而iOS11則是先將按鈕加到了_UITAMICAdaptorView,再加到_UIButtonBarStackView递惋、_UINavigationBarContentView柔滔,接著才是UINavigationBar溢陪。因此如果需要獲取導(dǎo)航欄按鈕 frame 或者 superView萍虽,這里需要專門做下適配
2.導(dǎo)航欄標(biāo)題的自適應(yīng)
(1)UINavigationBar 新增屬性 BOOL值 prefersLargeTitles ,該屬性設(shè)置為true就會(huì)顯示大標(biāo)題形真,
(2)可以通過 largeTitleTextAttributes 來設(shè)置大標(biāo)題的文本樣式杉编,
(3)如果想要在控制不同頁面大標(biāo)題的顯示超全,可以通過設(shè)置當(dāng)前頁面的navigationItem的largeTitleDisplayMode屬性;

navigationItem.largeTitleDisplayMode 

typedef NS_ENUM(NSInteger, UINavigationItemLargeTitleDisplayMode) {  
/// 自動(dòng)模式依賴上一個(gè) item 的特性
UINavigationItemLargeTitleDisplayModeAutomatic,
/// 針對(duì)當(dāng)前 item 總是啟用大標(biāo)題特性
UINavigationItemLargeTitleDisplayModeAlways,
/// Never 
UINavigationItemLargeTitleDisplayModeNever,
}

3.隱藏導(dǎo)航條和狀態(tài)欄
狀態(tài)欄的高度是20邓馒,導(dǎo)航欄的高度是44嘶朱,如果同時(shí)存在狀態(tài)欄的導(dǎo)航條,我們通常會(huì)設(shè)置view上的控件的位置的X 大于等于 64.
一:隱藏導(dǎo)航條:self.navigationController.navigationBarHidden = YES;
二:隱藏狀態(tài)欄:
第一步:在info.plist 文件里增加兩個(gè)類型(Type)為bool 選項(xiàng)光酣, Status bar is initially hidden 設(shè)為YES疏遏;View controller-based status bar appearance 設(shè)為NO;
第二步:在想要隱藏狀態(tài)欄的頁面的寫代碼: [UIApplication sharedApplication].statusBarHidden = YES;
另外救军,值得一說的是: 隱藏狀態(tài)欄和隱藏 導(dǎo)航條 所用到的原理與性質(zhì)一樣财异, 在一個(gè)頁面A隱藏了,其它與他有關(guān)的頁面B(如Apush到B)的狀態(tài)欄/導(dǎo)航欄也會(huì)被隱藏唱遭,如果不想隱藏某個(gè)頁面的狀態(tài)欄/導(dǎo)航條戳寸,則可以在viewWillAppear:(BOOL)animated 里寫 [UIApplication sharedApplication].statusBarHidden = NO/ self.navigationController.navigationBarHidden = NO;
4.原生導(dǎo)航欄搜索樣式發(fā)生變化
查看 API 后發(fā)現(xiàn)拷泽,iOS11后將 searchController 賦值給了 NavigationItem疫鹊,所以可以把你的UISearchController賦值給navigationItem,就可以實(shí)現(xiàn)將UISearchController集成到Navigation司致。

navigationItem.searchController  //iOS 11 新增屬性
navigationItem.hidesSearchBarWhenScrolling //決定滑動(dòng)的時(shí)候是否隱藏搜索框拆吆;iOS 11 新增屬性
  1. UIToolbar 和 UINavigaBar 做了新的自動(dòng)布局?jǐn)U展支持
    自定義的bar button items、自定義的title都可以通過layout來表示尺寸脂矫,constraints需要在view內(nèi)部設(shè)置锈拨,所以如果你有一個(gè)自定義的標(biāo)題視圖,你需要確保任何約束只依賴于標(biāo)題視圖及其任何子視圖羹唠。當(dāng)你使用自動(dòng)布局奕枢,系統(tǒng)假設(shè)你知道你在做什么。

自iOS11更新以來遇見的基本變化總結(jié)分享與大家佩微,也希望大家積極分享自己遇到的問題及改動(dòng)缝彬,讓我們?cè)贑oding的路上共同進(jìn)步同行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哺眯,一起剝皮案震驚了整個(gè)濱河市谷浅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奶卓,老刑警劉巖一疯,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異夺姑,居然都是意外死亡墩邀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門盏浙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眉睹,“玉大人荔茬,你說我怎么就攤上這事≈窈#” “怎么了慕蔚?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斋配。 經(jīng)常有香客問我孔飒,道長,這世上最難降的妖魔是什么艰争? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任十偶,我火速辦了婚禮,結(jié)果婚禮上园细,老公的妹妹穿的比我還像新娘惦积。我一直安慰自己,他們只是感情好猛频,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布狮崩。 她就那樣靜靜地躺著,像睡著了一般鹿寻。 火紅的嫁衣襯著肌膚如雪睦柴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天毡熏,我揣著相機(jī)與錄音坦敌,去河邊找鬼。 笑死痢法,一個(gè)胖子當(dāng)著我的面吹牛狱窘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播财搁,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蘸炸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了尖奔?” 一聲冷哼從身側(cè)響起搭儒,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎提茁,沒想到半個(gè)月后淹禾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茴扁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年铃岔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丹弱。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡德撬,死狀恐怖铲咨,靈堂內(nèi)的尸體忽然破棺而出躲胳,到底是詐尸還是另有隱情蜓洪,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布坯苹,位于F島的核電站隆檀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏粹湃。R本人自食惡果不足惜恐仑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望为鳄。 院中可真熱鬧裳仆,春花似錦、人聲如沸孤钦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏形。三九已至静袖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俊扭,已是汗流浹背队橙。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萨惑,地道東北人捐康。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像庸蔼,于是被迫代替她去往敵國和親吹由。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 本文為作者原創(chuàng)朱嘴,未經(jīng)作者允許不得轉(zhuǎn)載倾鲫。該文同時(shí)發(fā)表在騰訊bugly公眾號(hào):https://mp.weixin.qq...
    sonialiu閱讀 101,626評(píng)論 74 283
  • 一、NavigationBar UIBarItem UIBarItem在iOS11在中新增landscapeIma...
    灰s閱讀 3,813評(píng)論 5 11
  • iOS 11 為整個(gè)生態(tài)系統(tǒng)的 UI 元素帶來了一種更加大膽萍嬉、動(dòng)態(tài)的新風(fēng)格乌昔。 本文介紹iOS11中在UI方面做了哪...
    阿凡提說AI閱讀 590評(píng)論 0 1
  • 假期第三天,全家人集體感冒壤追,癥狀大多是渾身酸疼磕道,大寧和媽媽昨晚就吐了,以為是昨天必勝客惹的禍行冰,今天看來不是溺蕉,...
    軒寧爸閱讀 252評(píng)論 2 1
  • 導(dǎo)讀:每個(gè)人都有他/她專屬的故事伶丐,而我的故事發(fā)生在這里......... “山炮,在哪了疯特?” “在家哗魂,怎么了?” ...
    趙萬龍閱讀 130評(píng)論 0 0