在测试我们的应用程序时,我们遇到了一个有趣的bug。我们的表中有一些滑动操作,配置如下:
let retryAction = UIContextualAction(style: .destructive, title: "Remove")
retryAction.image = UIImage(named: "iconUploadRemove")
let retryAction = UIContextualAction(style: .normal, title: "Retry")
retryAction.image = UIImage(named: "iconUploadRetry")由于我们设置了图像,用户通常在表行上滑动时会看到图标:用图标滑动操作

但是如果用户增加了他们的文本大小

然后,动作标题与图标一起出现。

同时拥有文本和图标并不一定是一个问题,除了文本在这两个动作之间的对齐/间距。导致这种情况的似乎是字符串的长度。如果将文本设置为相同的字符串,则两个操作对齐。我知道我可以将标题设置为零,这将防止在启用大文本时文本出现。
但是为什么文本会以这种方式出现呢?是否可以在每个操作按钮上同时显示文本和图标?
发布于 2018-02-13 13:40:42
它似乎没有答案,为什么会出现文本,并出现错误对齐。
对于任何遇到这个问题的人,我们最终都会将这些按钮的标题设置为0,以保持“仅为图标”。
发布于 2018-07-20 12:35:00
我今天也遇到了同样的问题。根本原因是UIKit允许UILabel在2行上运行,即使它不需要:

这将是正确的用例:

所以我看到的唯一解决办法是丑陋的。覆盖,旋转,钻过子视图直到我们找到标签子类等.我不清楚什么(如果不是全部)解决方案会让你被拒绝从商店。
或者干脆不使用这个新的iOS 11 API,继续使用旧的UITableViewRowAction。
发布于 2019-02-22 14:23:02
您可以使这些文本对齐而不使用方法swizzling。
要实现这一点,您必须将所有动作图像设置为相同高度的。您可以在运行时这样做:
var actionImages = ["TrashCan", "Folder"].map { UIImage(named: $0)! }
let maxHeight = actionImages.map { $0.size.height }.max()!
for (index, image) in actionImages.enumerated() where image.size.height < maxHeight {
let size = CGSize(width: image.size.width, height: maxHeight)
actionImages[index] = UIGraphicsImageRenderer(size: size).image { context in
var centralizedRect = CGRect(origin: .zero, size: image.size)
centralizedRect.origin.y = (maxHeight - image.size.height) / 2
image.draw(in: centralizedRect)
}
}
// set images to your UIContextualAction…结果是这样的:

仍然不完美(课文下面有太多的空间),但是可以忍受。
https://stackoverflow.com/questions/48671607
复制相似问题