Вы можете использовать capHeight шрифта.
Objective-C
NSTextAttachment *icon = [[NSTextAttachment alloc] init];
UIImage *iconImage = [UIImage imageNamed:@"icon.png"];
[icon setBounds:CGRectMake(0, roundf(titleFont.capHeight - iconImage.size.height)/2.f, iconImage.size.width, iconImage.size.height)];
[icon setImage:iconImage];
NSAttributedString *iconString = [NSAttributedString attributedStringWithAttachment:icon];
[titleText appendAttributedString:iconString];
стриж
let iconImage = UIImage(named: "icon.png")!
var icon = NSTextAttachment()
icon.bounds = CGRect(x: 0, y: (titleFont.capHeight - iconImage.size.height).rounded() / 2, width: iconImage.size.width, height: iconImage.size.height)
icon.image = iconImage
let iconString = NSAttributedString(attachment: icon)
titleText.append(iconString)
Изображение вложения отображается на основе текста. И его ось y перевернута, как и система координат основной графики. Если вы хотите переместить изображение вверх, установите bounds.origin.y
положительное значение.
Изображение должно быть выровнено по вертикали по центру с capHeight текста. Итак, нам нужно установить bounds.origin.y
значение (capHeight - imageHeight)/2
.
Чтобы избежать эффекта зубчатости на изображении, мы должны округлить дробную часть y. Но шрифты и изображения обычно маленькие, даже разница в 1 пиксель заставляет изображение выглядеть смещенным. Поэтому перед делением я применил функцию округления. Это делает дробную часть значения y равной 0,0 или 0,5
В вашем случае высота изображения больше, чем capHeight шрифта. Но можно использовать так же. Значение смещения y будет отрицательным. И он будет выложен снизу базовой линии.