作者: sonia, 腾讯移动客户端开发 工程师
WeTest 导读
本文主要是介绍下 iOS 11 系统及 iOS 11 之前的系统在实现左滑操作功能上的区别, 及如何自定义左滑的标题颜色字体大小
一左滑操作功能实现
1 如果左滑的时候只有一个操作按钮, 可以使用如下三个 delegate 方法来实现:
1.png
2 如果左滑有一个或多个操作按钮, iOS8-10 可使用如下两个 delegate
2.png
3iOS 11 之后, tableView 的 delegate 增加了两个方法, 用来取代 editActionsForRowAtIndexPath 方法, 如下:
3.png
在 2 和 3 中, 如果是需要适配 iOS 11 之前的版本, 以上三个方法都需要实现
4 上面 1.2 和 1.3 中实现的方法的区别
体验上的不同就是当左滑只有一个 button 时, iOS 11 中可以一直左滑, 滑到一定程度时, 会执行点击按钮的操作, iOS 11 之前的不会
iOS 11 之前如果想增大 button 区域, 可通过在标题前后加空格的方式, 但 iOS 11 不行, 加空格无效, button 大小固定, 超过 4 个字时换行显示
二左滑操作自定义标题颜色字体
因为系统对左滑出的按钮只提供了 3 个可设置的属性: titlebackgroundColorimage, 如果使用自定义的 titleColor 和 font, 就需要自己来实现了实现的思想是 hook 系统实现, 但鉴于 UITableView 的 view 层级结构在 iOS 11 中有所改变, 所以 iOS8-10 和 iOS11 的实现有所不同, 以下分别给出
考虑到代码的可复用性, 自定义左滑操作的字体大小和颜色的代码不写在 viewController 中, 而是写在 UITableView 和 UITableViewCell 的 Category 中, 对外提供 editActionTitleColor 和 editActionTitleFont 属性来设置颜色和大小, 需要使用自定义颜色和字体时只需要设置一下这两个属性即可
1iOS 8-10 设置标题颜色和字体
左滑操作后, UITableView 的层级结构如下图:
4.png
由上图可知, 左滑的操作按钮是在 UITableViewCell 的子 view, 所以我们可以在 UITableViewCell 的 category 中 hook 掉 layoutSubviews 方法, 找到 UITableViewCellDeleteConfirmationView 的子 view button, 设置字体颜色和大小
代码如下:
5.png
2 iOS 11 设置标题颜色和字体
左滑操作后, UITableView 的层级结构如下图:
6.png
由上图可知, 左滑的操作按钮是在 UITableView 的子 view, 所以我们可以在 UITableView 的 category 中 hook 掉 layoutSubviews 方法, 找到 UISwipeActionPullView 的子 view button, 设置字体颜色和大小
代码如下:
7.png
三遇到的问题及原因分析
1 问题是 iOS 11 上设置颜色有延迟, 颜色有一个明显的跳变, 从系统默认色跳转到我设置的颜色
有问题的代码如下:
8.png
2 问题原因分析
当左滑一个 cell 后, 直接操作左滑另一个 cell, 这个时候 tableView 上会有两个 UISwipeActionPullView, 此时 tableView 的部分 view 层级如下图所示:
9.png
而上面的代码, 在__findSwipActionButton 方法中, 找到其中一个 UISwipeActionPullView 上面的 button 就直接返回了, 没有设置第二个 UISwipeActionPullView 的 button 的颜色, 导致显示了系统默认色
3 解决方法
将以上有问题的代码修改为以下代码: 找出所有的 UISwipeActionPullView, 返回 UISwipeActionPullView 的 button 数组, 对 button 数组进行设置字体颜色和大小, 这个数组最多有两个元素, 因为左滑出下一个 cell 时, 上一个 cell 会逐渐消失, 当此 cell 左滑操作完成时, 上一个左滑的 cell 也会完成消失
解决后的代码如二 (2) 的示例代码
腾讯 WeTest iOS 预审工具
为了提高 IEG 苹果审核通过率, 腾讯专门成立了苹果审核测试团队, 打造出 iOS 预审工具这款产品经过 1 年半的内部运营, 腾讯内部应用的 iOS 审核通过率从平均 35% 提升到 90%
现将腾讯内部产品的过审经验, 以线上工具的形式共享给各位在 WeTest 腾讯质量开放平台上可以在线使用
点击 http://wetest.qq.com/product/ios 即可立即体验!
如果使用当中有任何疑问, 欢迎联系腾讯 WeTest 企业 QQ:800024531
iOS 预审服务
扫描工具上传 IPA 包图片视频应用描述即可进行测试; 多维度自动扫描提审材料的被拒风险; 1 小时内反馈全面的扫描报告
专家预审腾讯专家为您遍历 App 所有功能模块; 全面暴露 App 内容被拒风险; 跟进问题直至上线(需提供官方拒绝邮件)
专家咨询资深预审专家一对一服务; 咨询时间灵活可选, 按需购买; 有的放矢解 决审核问题
ASO 优化专业团队多维度深度剖析 App 的 ASO 现状; 围绕 App 目标用户群筛选高 度关联的关键词; 帮助提升 App 在苹果应用商店中的曝光率
来源: https://cloud.tencent.com/developer/article/1039707