這是一篇 WWDC Session 204 "Updating Your App for iOS 11" 的總結(jié)席爽,里面的內(nèi)容涉及到了產(chǎn)品桅锄、設(shè)計(jì)以及開發(fā)需要了解的內(nèi)容赘阀。
- 在 "iPad" 以及 "iPhone 的 Landscape" 下, UITabBarItem 圖片和文字并排排列了筋夏,并且長(zhǎng)按 UITabBarItem 會(huì)有一個(gè)大的 HUD 顯示在中間
通過設(shè)置UIBarItem.largeContentSizeImage
可以設(shè)置 Tabbar 長(zhǎng)按之后顯示在中間的圖片
(這個(gè)功能我在 Beta 2 中沒有試出來戒傻,只能截取官方的圖片)
- iOS 11 為我們帶來了 "Large Title"税手,效果如下,當(dāng) "ScrollView" 向上滑動(dòng)時(shí)需纳,"Large Title" 會(huì)跟著改變, 效果如下:
- "SearchBar" 被移植到了 "NavigationBar" 上面芦倒, 提供兩種模式,一種是滾動(dòng)后隱藏 searchBar(如上圖), 另外一種就是保留 searchBar 在 Navigation 上不翩。通過以下代碼控制
navigationItem.hidesSearchBarWhenScrolling = false
UIToolbar, UINavigationBar 支持 Auto Layout
UIView.layoutMargins
被擴(kuò)展到了UIView.directionalLayoutMargins
兵扬, 支持 Right to Left 語(yǔ)言(和我們關(guān)系不大麻裳,除非某天我們進(jìn)軍中東的某些國(guó)家了)。并且周霉,這兩個(gè)屬性會(huì)互相同步UIViewController 添加
systemMinimumLayoutMargins
屬性(說實(shí)話掂器,我們布局真的很少用到這個(gè)東西,不過可以作為了解)新增
UIView.safeAreaLayoutGuide
俱箱,同時(shí)廢棄UIViewController.topLayoutGuide
和UIViewController.bottomLayoutGuide
国瓮。如果你之前處理過UINavigationBar
的translucent
,你就會(huì)發(fā)現(xiàn)topLayoutGuide
的表現(xiàn)只能用差強(qiáng)人意來形容狞谱,希望這次新增的safAreaLayoutGuide
能夠徹底改變這個(gè)現(xiàn)狀
///safeAreaLayoutGuide 取代 topLayoutGuide 的代碼
//subview.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive = true
subview.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
藍(lán)色區(qū)域即:UIView.safAreaLayoutGuide
-
UIScrollView
新增adjustedContentInset
-
UIScrollView
新增frameLayoutGuide
和contentLayoutGuide
乃摹, 目的是為了降低 ScrollView Auto Layout 的難度
UITabelViewCell
的 rowHeight 默認(rèn)變成UITableViewAutomaticDimension
, 意味著自動(dòng)算高會(huì)更普及了UITableView
開放了 "Full Swipe", 就像刪除郵件的操作一樣
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
return nil
}
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: UIContextualAction.Style.destructive, title: "Delete") { (action, view, completionHandler) in
self.tableView.beginUpdates()
self.data.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.left)
self.tableView.endUpdates()
completionHandler(true)
}
let configuration = UISwipeActionsConfiguration(actions: [action])
return configuration
}