我正在使用
UIContextualAction
来实现 UITableViewCell
的滑动删除功能。我使用 + (instancetype)contextualActionWithStyle:(UIContextualActionStyle)style title:(nullable NSString *)title handler:(UIContextualActionHandler)handler
方法来构造 UIContextualAction
,然后使用 setImage:
属性为其设置图像。
但是,当我运行此代码并尝试滑动删除时,菜单中仅显示图像。标题缺失。当我注释掉
setImage
属性时,会显示标题。为什么会这样呢?我在实现中遗漏了一些东西还是这是苹果的一个错误?
UIContextualAction
支持文本或图像。通过使用 setImage:
设置图像,您基本上可以删除创建对象时设置的标题。如果您想要文本和图像,您必须创建带有嵌入文本的图像。
编辑
我的回答是基于我自己的经验,不幸的是,该特定课程的官方文档根本没有任何帮助。我还发现了有关该问题的提示here(“通过指定图像,初始化程序中的标题不会显示”)。
在您的评论中,您说如果高度> 91px,则会显示标题和图像。与这个雷达匹配(那里说高度应该> = 91px),所以这毕竟可能是一个错误。
目前看来,唯一的选择是创建带有嵌入文本的图像,或将单元格高度增加到 91 像素。
编辑2 正如拉卡的评论所指出的,使用带有嵌入文本的图像具有可访问性缺点,例如VoiceOver 将无法识别该操作的语义。您可以使用
accessibilityCustomActions
来克服这个问题(参见
这个问题)。
作为解决方案,我们可以使用
UIGraphicsImageRenderer
将文本渲染为图像
let renderer = UIGraphicsImageRenderer(bounds: bounds)
contextAction.image = renderer.image { context in
// draw your image and text using Core Graphics API here
}
这是解决方法,但苹果没有为我们提供另一种方法......