Это дизайн Apple, что только когда высота ячейки равна или больше 90, и изображение, и заголовок будут отображаться при смахивании. Есть 3 способа показать оба.
Следующий код задает для названия действия значение «Пойман» и задает для изображения системный значок звездочки.
let starAction = UIContextualAction(style: .normal, title: “Caught”) { _, _, _ in }
let starImage = UIImage(systemName: “star.fill”)
starAction.image = starImage
Мы ожидаем, что при смахивании будут отображаться и изображение, и заголовок, но когда высота ячейки меньше 90, мы получаем следующий результат.

Это дизайн Apple, что только когда высота ячейки равна или больше 90, и изображение, и заголовок будут отображаться при смахивании. Когда высота ячейки меньше 90, при смахивании будет отображаться только изображение, если вы установите и изображение, и заголовок. Вы можете наблюдать это в некоторых встроенных приложениях, таких как Сообщения.
Что, если вы хотите показать их обоих? Вы можете рассмотреть следующие 3 способа.
1. Установите высоту ячейки на ›= 90
Это очень просто. Если установить высоту ячейки равной или большей 90, появятся и изображение, и текст.

2. Замените изображение символом Юникода
Если ваша иконка обычная, например, звезда, сердце или мусорная корзина, возможно, вы можете заменить изображение на символ Unicode.
let star = UIContextualAction(style: .normal, title: “\u{2605}\nCaught”) { _, _, _ in }

Символ Юникода выглядит меньше системного значка при смахивании. Возможно, вы захотите увеличить значок, изменив размер шрифта, но при этом увеличится и текст.
Недостатком этого подхода является то, что вы не можете изменить размер только значка, не затрагивая остальную часть текста. Включение значка Unicode в заголовок означает, что размер значка будет меняться вместе с размером шрифта.
Вы можете подумать об атрибутированной строке. К сожалению, заголовок UIContextualAction не поддерживает строку с атрибутами.
3. Преобразуйте изображение и заголовок в изображение
Мы можем создать метку, включающую текст и изображения через NSAttributedString и NSTextAttachment, а затем преобразовать метку в изображение.
Во-первых, создайте строку с атрибутами, которая включает в себя как ваш текст, так и изображение.
let text = NSMutableAttributedString(string: “Caught”)let attachment = NSTextAttachment() attachment.image =UIImage(systemName: “star.fill”)text.append(NSAttributedString(attachment: attachment))
А затем создайте метку для хранения строки с атрибутами.
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
label.textAlignment = .center
label.numberOfLines = 2
label.attributedText = text
Наконец, преобразуйте метку в изображение.
let renderer = UIGraphicsImageRenderer(bounds: label.bounds) let image = renderer.image { context in label.layer.render(in: context.cgContext) }if let cgImage = image.cgImage { let finalImage = UIImage(cgImage: cgImage, scale: UIScreen.main.scale, orientation: .up) }

У этого подхода есть некоторые недостатки:
Размер шрифта будет фиксированным на изображении, поэтому и значок, и текст в действии смахивания не будут поддерживать динамический тип.
Кроме того, изображение в действии смахивания имеет максимальный размер; если ваша метка слишком широкая, изображение будет уменьшаться при смахивании.
Кроме того, шрифт текста выглядит меньше, чем отображается в заголовке. Если вы попытаетесь установить размер шрифта больше, текст будет обрезан.
