UIContextualAction 的标题不可见(UITableView 滑动删除 - iOS 11)

问题描述 投票:0回答:2

我正在使用

UIContextualAction
来实现
UITableViewCell
的滑动删除功能。我使用
+ (instancetype)contextualActionWithStyle:(UIContextualActionStyle)style title:(nullable NSString *)title handler:(UIContextualActionHandler)handler
方法来构造
UIContextualAction
,然后使用
setImage:
属性为其设置图像。

但是,当我运行此代码并尝试滑动删除时,菜单中仅显示图像。标题缺失。当我注释掉

setImage
属性时,会显示标题。为什么会这样呢?我在实现中遗漏了一些东西还是这是苹果的一个错误?

ios uitableview ios11 uitableviewrowaction
2个回答
15
投票

UIContextualAction
支持文本图像。通过使用
setImage:
设置图像,您基本上可以删除创建对象时设置的标题。如果您想要文本图像,您必须创建带有嵌入文本的图像。

编辑

我的回答是基于我自己的经验,不幸的是,该特定课程的官方文档根本没有任何帮助。我还发现了有关该问题的提示here“通过指定图像,初始化程序中的标题不会显示”)。

在您的评论中,您说如果高度> 91px,则会显示标题和图像。与这个雷达匹配(那里说高度应该> = 91px),所以这毕竟可能是一个错误。

目前看来,唯一的选择是创建带有嵌入文本的图像,或将单元格高度增加到 91 像素。

编辑2 正如拉卡的评论所指出的,使用带有嵌入文本的图像具有可访问性缺点,例如VoiceOver 将无法识别该操作的语义。您可以使用

accessibilityCustomActions
来克服这个问题(参见 这个问题)。


1
投票

作为解决方案,我们可以使用

UIGraphicsImageRenderer 

将文本渲染为图像
let renderer = UIGraphicsImageRenderer(bounds: bounds)
contextAction.image = renderer.image { context in
    // draw your image and text using Core Graphics API here
}

这是解决方法,但苹果没有为我们提供另一种方法......

© www.soinside.com 2019 - 2024. All rights reserved.