UIContextualAction图标和文本对齐

时间:2018-02-07 19:13:39

标签: ios swift uicontextualaction

在测试我们的应用时,我们遇到了一个有趣的错误。我们在表中配置了一些滑动操作,如下所示:

let retryAction = UIContextualAction(style: .destructive, title: "Remove")
retryAction.image = UIImage(named: "iconUploadRemove")

let retryAction = UIContextualAction(style: .normal, title: "Retry")
retryAction.image = UIImage(named: "iconUploadRetry")

由于我们设置了图片,因此用户在桌面行上滑动时通常会看到图标:使用图标滑动操作

Swipe Action with Icons

但是,如果用户增加了文字大小Increases their text size

然后动作标题与图标一起显示

the action titles show up along with the icons

除了两个动作之间的文本对齐/间距之外,同时具有文本和图标不一定是问题。它似乎是引起这种情况的字符串的长度。如果我将文本设置为相同的字符串,则两个操作均匀对齐。我知道我可以将标题设置为nil,这样可以防止在启用大文本时出现文本。

但为什么文字出现在这种模式下?是否可以在每个操作按钮上正确对齐文本和图标?

4 个答案:

答案 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…

结果是这样的:

Result

仍然不够完美(文本下方有太多空间),但可以忍受。