关于iOS 11的一些新特性适配实践总结

2020-01-21 02:15:03王旭

此外,iOS 11 还为 table view 添加了更多的滑动操作的控制能力。分别可以通过以下两个 UITableViewDelegate 的方法

实现:


func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?

我们可以注意到两个方法均要求返回一个 UISwipeActionsConfiguration 实例。为构造这个实例,我们还需要构造一个由 UIContextualAction 实例组成的数组。UIContextualAction 与原本的 UITableViewRowAction 大致类似,但是要注意在 contextual action 的参数 handler 中,我们需要调用 handler 参数中的 completionHandler 才能完成操作。从这一点我们可以看到,似乎在新的 action 中,我们可以做一些异步操作相关的事情。

下面是一个删除操作的示例:


override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
 let contextualAction = UIContextualAction.init(style: .destructive, title: "Delete") { (style, title, completionHandler) in
  // 删除指定的数据
  completionHandler(true)
 }
 
 let actionsConfiguration = UISwipeActionsConfiguration.init(actions: [contextualAction])
 return actionsConfiguration
}

在 swipe actions configuration 中,我们还需要注意一点,那就是新的 performsFirstActionWithFullSwipe 属性。通过开启这个属性的配置(默认开启),我们可以为第一个动作提供 full swipe 操作 (一种通过过度滑动从而触发动作的交互) 。

如果仅仅实现了以往的编辑的代理方法,在 iOS 11 中,对于第一个动作将会默认支持 full swipe, 且不能关闭。

Face ID

如果已经做过了 Touch ID 那么实际上适配 Face ID 便并不难了。即便是不做任何的改动,估计 Face ID 也是可以直接使用的(写作时, iPhone X 还未上市),当然相关的体验肯定会打点折扣,毕竟文案以及相关的提示操作还是在仅有 Touch ID 的前提下实现的。

与以往一样,可以通过 LAContext 类实现生物识别认证。不过需要注意的是,因为支持了新的 Face ID 认证,苹果便为 LAContext 类添加了新的接口 biometryType 用于区分 Touch ID 以及 Face ID。同时,以往仅涵盖 Touch ID 的错误类型,也在 iOS 11 中废弃了,相应的,苹果提供了新的更通用的错误类型予以替代。

IOS 11 下适配UITableView

UIScrollView及其子类在IOS 11之前的版本UI显示完全正常,但是在IOS 11上面会显示奇葩的界面。

 (1)先看一下UITablevIew。

原本在VC里面的automaticallyAdjustsScrollViewInsets竟然过期了,在IOS 11下 APPLE推荐使用UIScrollView的contentInsetAdjustmentBehavior属性进行设置自动计算滚动视图的内容边距。