這是每年必看的一個 session,基本上是 iOS 的 API 更新的總章,會告訴你都有哪幾個點的 feature。今年也不例外,蘋果的著眼點是:
- Productivity
- UI refinements
- API enhancement
Productivity
Drag and drop
這是今年的重頭戲,非常強大。你可以在 照片 app 中選擇多張圖,然後拖入 email.app,他就成了 email 的附件。
蘋果為了開發者能做好這方面的開發,準備了四講 Session
這裡蘋果也沒展開具體說 API 怎麼用,只是列了一下讓一個 customView 支援 drag 和 drop 分別要實現什麼。
- Drop
- Drag
我這裡也就不展開去寫 demo 了,等後面四個 session 一起來玩一下這個 API。
File ManageMent
由於 iOS 11 蘋果給了一個新的 app —— files。
蘋果很大方的把 files 的 view controller 拿出來給大夥兒用。
這個東西看起來不起眼,然而他具有高度的可定製性;可以訪問本地檔案或者雲盤檔案.
具體詳細介紹,見:
UI Refinements
NavigationBar
iOS 11 在 UIKit 上最明顯的變化就是 WinPhone 樣子的 NavigationBar 了。
NavigationBar 的 title 支援了大字模式。
再滾上去之後,就又會變成我們熟悉的 title
而開啟大字模式,僅需這兩個 API
可以看最上面那張效果圖裡的 Message 的 navigaitonbar,它內建了搜尋框。我們通過這樣的程式碼也可以啟用它:
然後,蘋果居然把 RefreshControl 也坐進去了。。。
蘋果據說這個 feature 你若是用了 大字模式 + UIRefreshControl。這個是自動實現的。
於是乎坑爹的地方開始了:
這個東西是 NavigationBar......高度變了,變厚了好多。於是我們當初若誰圖省事用 44 來拿高度的,全都會掛出去。
蘋果給了一個新的 API,來標記這塊可變區域
SafeAreaInsets,也不知道誰想出來的名字。
對應的程式碼是這樣的:
然後蘋果自豪的說,UIScrollview 能幫你自動完成很多適配問題。你甚至不需要寫一行程式碼。
當然不能 100% 保證,如果你想自己 handle。你可以通過修改這些 API:
長成這模樣的 API 大家應該很熟悉吧。當初 iOS 7 開始變成全屏模式之後,也有個類似的東西。用不好就會 app 上面頂出來 64px 的空白區域。
所以我個人覺得,不要對這個 api 抱有太大希望。
以及事實上確實如此,我成功用 xcode 9 把禮物說跑起來了,相容性問題出現最大的地方就是 navigationbar 的行為問題。
TableView
TableView 的修改,可以參考 Mail App,多加了一些 Cell 的側滑手勢:
實現起來蠻容易的,且 UIKit 自動幫你完成很多事情:
API enhancement
Swift4 And Foundation
- Codable protocol
這個東西還是蠻強大的,你只需要在 enum/struct/class 上實現 codable 這個協議,預設的 protocol extension 就能幫你完成 NSCoding/JSON/Plist 的序列化與反序列化。
但事實上吧...並沒有那麼智慧,他有點像 Android 的 Gson 庫。僅支援 key 和 property 一一對應。如果不對應的話,還是要手動實現的。
不過怎麼說還是比原來用 SwiftyJSON 實現起來優雅多了。
- KeyPath
蘋果越發的讓程式碼變得更安全,在 OC 的歷史包袱上,我們知道 selector、valueForKeyPath 之類的東西全都是用字串來描述的。
這類東西沒有補全,寫起來很容易出問題。Swift 3 攻克了 Selector 的問題,Swift 4 讓 KeyPath 也變得安全了。
- block-based KVO
既然 KeyPath 被翻新了,蘋果就順路把 KVO 也收拾了
程式碼比以前簡潔太多了。
UIKit
- preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge
UIViewController 的一個 method,用來 defer 系統的各種手勢,例如上邊緣下滑喚出 notificationCenter,提升使用者體驗。
- AutoLayout and ScrollView
ScrollView 新增了兩個 layoutGuide:ContentLayoutGuide 和 frameLayoutGuide 來幫助我們解決 ScrollView 上加 Autolayout 的問題,真是激動人心,然而我們國內開發者沒法用
- dynamic type
在過去,如果我們想支援大字模式的話。我們需要用 UIFont 的 preferredFont Api,然而國內開發者們很少用。因為我們設計師用的蘭亭細黑之類的,特殊字型。
新的 API 就愉快多了:
甚至可以這樣:
於是 Autolayout 也新增了相關的功能,畢竟佈局是整體的,當字號跟著變大了,行距之類的都要進行調整。
這個 feature 同樣適用於 VFL 和 UIStackView
Password autofill
強行借鑑 1Password
Asset Catalogs
- 可以用命名 color 了,比如直接 themeColor,而不用更像之前那樣需要自己寫 Enum
- PDF 的圖片可以根據 dynamicType 進行縮放
- Tabbar 在大字模式下 會有按住顯示 tabbar 內容的 feature。如果你用了 PDF 的圖片,體驗會好很多。
ProMotion 重新整理率
因為 iPad Pro 120FPS,所以 UIScreen 提供了獲取裝置最大的重新整理率的 API。我們可以根據自己的 app,動態調整重新整理率。