Ви можете використовувати capHeight шрифту.
Ціль-С
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
позитивне.
Зображення слід вирівняти вертикально по центру з верхньою величиною тексту. Таким чином , ми повинні встановити bounds.origin.y
в (capHeight - imageHeight)/2
.
Уникаючи деякого нерівного ефекту на зображенні, ми повинні округлити частину дробу. Але шрифти та зображення зазвичай невеликі, навіть 1px різниця робить зображення схожим на нерівне. Тому я застосував круглу функцію перед поділом. Це робить частину частки значення y рівним .0 або .5
У вашому випадку висота зображення більша за верхню висоту шрифту. Але можна використовувати той самий спосіб. Значення зміщення y буде від’ємним. І він буде викладений знизу від базової лінії.