在测试我们的应用时,我们遇到了一个有趣的错误。我们在表中配置了一些滑动操作,如下所示:
let retryAction = UIContextualAction(style: .destructive, title: "Remove")
retryAction.image = UIImage(named: "iconUploadRemove")
let retryAction = UIContextualAction(style: .normal, title: "Retry")
retryAction.image = UIImage(named: "iconUploadRetry")
由于我们设置了图片,因此用户在桌面行上滑动时通常会看到图标:使用图标滑动操作
然后动作标题与图标一起显示
除了两个动作之间的文本对齐/间距之外,同时具有文本和图标不一定是问题。它似乎是引起这种情况的字符串的长度。如果我将文本设置为相同的字符串,则两个操作均匀对齐。我知道我可以将标题设置为nil,这样可以防止在启用大文本时出现文本。
但为什么文字出现在这种模式下?是否可以在每个操作按钮上正确对齐文本和图标?
答案 0 :(得分:2)
我今天遇到了完全相同的问题。根本原因是UIKit允许UILabel
连续2行,即使不需要时也是如此:
这将是正确的用例:
因此,我看到的唯一解决方案很难看。覆盖,滚动,在子视图中钻取,直到找到label subclass,依此类推... 而且我不清楚哪种(如果不是全部)解决方案会让您被商店拒绝。
或者根本不使用这个新的iOS 11 API,而是坚持使用旧的UITableViewRowAction
。
答案 1 :(得分:0)
似乎没有出现文本出现原因的答案,并且显示错误对齐。
对于遇到此问题的任何人,我们最终将这些按钮的标题设置为nil,以使它们“仅限图标”。
答案 2 :(得分:0)
您需要使用图像PNG播放。使其画布大小增加/调整(周围有空白),直到获得结果
就我而言,设置
单元格高度:92 图标图像宽度:32 图标图像高度:40
最后一切都完美对齐了。
答案 3 :(得分:0)
您可以使这些文本对齐而不会使方法混乱。
要实现此目的,您必须将所有动作图像设置为相同高度。您可以在运行时执行此操作:
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…
结果是这样的:
仍然不够完美(文本下方有太多空间),但可以忍受。