適配 iOS 11 和 iPhone X

官方資源

WWDC 2017 Session 204: Updating Your App for iOS 11
WWDC視頻: Designing for iPhone X
為 iPhone X 更新您的 app
Apple: Layout Guides and Safe Area

博客資源

關(guān)于iOS11中estimatedRowHeight
  1. estimatedRowHeight 是一個(gè)預(yù)估高度,iOS 11 之前為 0姆另,在 iOS11 下默認(rèn)為44呵扛。
  2. 使用 estimatedRowHeight 屬性光戈,可以將系統(tǒng)計(jì)算 contentSize 的高度的幾何計(jì)算成本從加載時(shí)推遲到滾動(dòng)時(shí)再執(zhí)行控硼。
  3. 結(jié)論:當(dāng) cell 的實(shí)際高度大于預(yù)估高度的時(shí)候漱牵,會(huì)按照預(yù)估高度下的 cell 的數(shù)量來(lái)計(jì)算 contentSize 暇仲,當(dāng) cell 的實(shí)際高度小于預(yù)估高度的時(shí)候步做,會(huì)按照實(shí)際高度下的 cell 的數(shù)量來(lái)計(jì)算 contentSize。
  4. 使用 MJRefresh:(以下的問(wèn)題在最新的版本已經(jīng)修復(fù)了D胃健)
    為什么使用 MJRefresh 在 iOS 11 下要設(shè)置 estimatedRowHeight=0?
    因?yàn)?MJRefresh 底部的上拉刷新是根據(jù) contentSize 來(lái)計(jì)算的全度,當(dāng)數(shù)據(jù)更新的時(shí)候,得出來(lái)的 contentSize 只是預(yù)估的斥滤。
  5. estimatedRowHeight 的值設(shè)置為 0将鸵,可以禁用此屬性:
override func viewDidLoad() { 
tableView.estimatedRowHeight = 0 
tableView.estimatedSectionHeaderHeight = 0 
tableView.estimatedSectionFooterHeight = 0
}
天天品嘗iOS7甜點(diǎn) :: Day 20 :: View controller content and navigation bars
// iOS 11 中,`automaticallyAdjustsScrollViewInset` 屬性被棄用了中跌。
@property(nonatomic, assign) BOOL automaticallyAdjustsScrollViewInsets;

該屬性早年的作用:
默認(rèn)為 YES咨堤,它允許容器視圖控制器知道它應(yīng)該調(diào)整插入此視圖控制器視圖中的滾動(dòng)視圖,以考慮狀態(tài)欄漩符,搜索欄一喘,導(dǎo)航欄,工具欄或選項(xiàng)卡欄消耗的屏幕區(qū)域。

WWDC 204: Updating Your App for iOS 11 筆記

  • UIBarItem

橫屏模式下凸克,Tabbar 上的圖標(biāo)會(huì)變小议蟆,長(zhǎng)按可以彈出顯示大圖標(biāo)。

UIBarItem.landscapeImagePhone
UIBarItem.LargeContentSizeImaage
  • 控制導(dǎo)航欄顯示大標(biāo)題

主視圖控制器上顯示大圖標(biāo)

// 設(shè)置導(dǎo)航欄顯示大標(biāo)題
navigationBar.prefersLargeTitles = true

詳細(xì)視圖控制器只顯示小圖標(biāo)

// 詳細(xì)視圖控制器中顯示正常標(biāo)題
navigationItem.largeTitleDisplayMode = .never
  • 導(dǎo)航欄自動(dòng)集成 UISearchController
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = YES;
  • UIToolbarUINavigationBar 擴(kuò)展了新的自動(dòng)布局支持

自定義的bar button items萎战、自定義的 title 都可以通過(guò) layout 來(lái)自定義尺寸咐容。

Extensive new Auto Layout support

Keep your constraints inside your views

“We assume you know what you’re doing”

  • 避免零尺寸的自定義視圖

UINavigationBar and UIToolbar provide position

You must provide size

  • Constraints for width and height
  • Implement intrinsicContentSize
  • Connect your subviews via constraints
  • Margins and Insets

margins 指的是【控件顯示內(nèi)容的邊緣】和【控件本身邊緣】之間的距離。

image
image

?

image

?
?
image

// systemMinimumLayoutMargins
viewRespectsSystemMinimumLayoutMargins = true // default
// directionalLayoutMargins
 
// edgesForExtendedLayout.top
// topLayoutGuide ?
// edgesForExtendedLayout.bottom
// bottomLayoutGuide ?
  • Safe Area

Describes area of view not occluded by ancestors ——用于描述不被遮擋的視圖區(qū)域

Available as insets or layout guide —— 可以用作插入量或者布局指引

Incorporates overscan compensation insets ——

image
image
  • Extending the Safe Area Insets——擴(kuò)展安全區(qū)域插入量
// 通過(guò) addtionalSafeAreaInsets 來(lái)改變 safeAreaInsets 的值
UIViewController.additionalSafeAreaInsets

// 獲取改變的回調(diào):
UIView.safeAreaInsetsDidChange()
UIViewController.viewSafeAreaInsetsDidChange()

適配代碼

// 設(shè)置 view.top = self.view.top
CGFloat top;
if (@available(iOS 11.0, *)) {
    top = self.view.layoutMarginsGuide.layoutFrame.origin.y;
} else {
    top = 64;
}

// Masonry 框架
// 設(shè)置 View.top = self.view.top + 60
if (@available(iOS 11.0, *)) {
    make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).with.offset(0);
} else {
    make.top.equalTo(self.view.mas_top).with.offset(64);
}
  • Scroll View

adjustedContentInset

typedef struct UIEdgeInsets {
    CGFloat top, left, bottom, right;  // 指定每個(gè)邊的插入量(正數(shù))蚂维。 值可能是負(fù)的(超出邊緣)戳粒。
} UIEdgeInsets;
  • Table View——在iOS 11中默認(rèn)啟用Self-Sizing

UITableViewAutomaticDimension

// 關(guān)閉 estimateRowHeight 屬性
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

tableView.separatorInsetReference = .fromCellEdges // default
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虫啥,隨后出現(xiàn)的幾起案子蔚约,更是在濱河造成了極大的恐慌,老刑警劉巖涂籽,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苹祟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡评雌,警方通過(guò)查閱死者的電腦和手機(jī)树枫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)景东,“玉大人砂轻,你說(shuō)我怎么就攤上這事∧褪恚” “怎么了舔清?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)曲初。 經(jīng)常有香客問(wèn)我体谒,道長(zhǎng),這世上最難降的妖魔是什么臼婆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任抒痒,我火速辦了婚禮,結(jié)果婚禮上颁褂,老公的妹妹穿的比我還像新娘故响。我一直安慰自己,他們只是感情好颁独,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布彩届。 她就那樣靜靜地躺著,像睡著了一般誓酒。 火紅的嫁衣襯著肌膚如雪樟蠕。 梳的紋絲不亂的頭發(fā)上贮聂,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音寨辩,去河邊找鬼吓懈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靡狞,可吹牛的內(nèi)容都是我干的耻警。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼甸怕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甘穿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梢杭,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扒磁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后式曲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缸榛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吝羞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片内颗。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钧排,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出均澳,到底是詐尸還是另有隱情恨溜,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布找前,位于F島的核電站糟袁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏躺盛。R本人自食惡果不足惜项戴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽惫。 院中可真熱鬧周叮,春花似錦、人聲如沸界斜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)各薇。三九已至项贺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敬扛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工晰洒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啥箭。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓谍珊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親急侥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砌滞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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