这是每一年必看的一个 session,基本上是 iOS 的 API 更新的总章,会告诉你都有哪几个点的 feature。今年也不例外,苹果的着眼点是:swift
这是今年的重头戏,很是强大。你能够在 照片 app 中选择多张图,而后拖入 email.app,他就成了 email 的附件。api
苹果为了开发者能作好这方面的开发,准备了四讲 Sessionxcode
这里苹果也没展开具体说 API 怎么用,只是列了一下让一个 customView 支持 drag 和 drop 分别要实现什么。安全
我这里也就不展开去写 demo 了,等后面四个 session 一块儿来玩一下这个 API。session
因为 iOS 11 苹果给了一个新的 app —— files。app
苹果很大方的把 files 的 view controller 拿出来给大伙儿用。ide
这个东西看起来不起眼,然而他具备高度的可定制性;能够访问本地文件或者云盘文件.布局
具体详细介绍,见:字体
iOS 11 在 UIKit 上最明显的变化就是 WinPhone 样子的 NavigationBar 了。ui
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 的修改,能够参考 Mail App,多加了一些 Cell 的侧滑手势:
实现起来蛮容易的,且 UIKit 自动帮你完成不少事情:
这个东西仍是蛮强大的,你只须要在 enum/struct/class 上实现 codable 这个协议,默认的 protocol extension 就能帮你完成 NSCoding/JSON/Plist 的序列化与反序列化。
但事实上吧...并无那么智能,他有点像 Android 的 Gson 库。仅支持 key 和 property 一一对应。若是不对应的话,仍是要手动实现的。
不过怎么说仍是比原来用 SwiftyJSON 实现起来优雅多了。
苹果愈加的让代码变得更安全,在 OC 的历史包袱上,咱们知道 selector、valueForKeyPath 之类的东西全都是用字符串来描述的。
这类东西没有补全,写起来很容易出问题。Swift 3 攻克了 Selector 的问题,Swift 4 让 KeyPath 也变得安全了。
既然 KeyPath 被翻新了,苹果就顺路把 KVO 也收拾了
代码比之前简洁太多了。
UIViewController 的一个 method,用来 defer 系统的各类手势,例如上边缘下滑唤出 notificationCenter,提高用户体验。
ScrollView 添加了两个 layoutGuide:ContentLayoutGuide 和 frameLayoutGuide 来帮助咱们解决 ScrollView 上加 Autolayout 的问题,真是激动人心,然而咱们国内开发者无法用
在过去,若是咱们想支持大字模式的话。咱们须要用 UIFont 的 preferredFont Api,然而国内开发者们不多用。由于咱们设计师用的兰亭细黑之类的,特殊字体。
新的 API 就愉快多了:
甚至能够这样:
因而 Autolayout 也添加了相关的功能,毕竟布局是总体的,当字号跟着变大了,行距之类的都要进行调整。
这个 feature 一样适用于 VFL 和 UIStackView
强行借鉴 1Password
由于 iPad Pro 120FPS,因此 UIScreen 提供了获取设备最大的刷新率的 API。咱们能够根据本身的 app,动态调整刷新率。