Vous pouvez utiliser le capHeight de la police.
Objectif 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];
Rapide
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)
L'image de la pièce jointe est rendue sur la ligne de base du texte. Et l'axe y est inversé comme le système de coordonnées graphiques de base. Si vous souhaitez déplacer l'image vers le haut, définissez le bounds.origin.y
sur positif.
L'image doit être alignée verticalement au centre du capHeight du texte. Nous devons donc définir le bounds.origin.y
sur (capHeight - imageHeight)/2
.
En évitant un effet irrégulier sur l'image, nous devrions arrondir la partie fraction de y. Mais les polices et les images sont généralement petites, même une différence de 1px donne à l'image un aspect mal aligné. J'ai donc appliqué la fonction round avant de diviser. Il rend la fraction partie de la valeur y à 0,0 ou 0,5
Dans votre cas, la hauteur de l'image est plus grande que le capHeight de la police. Mais vous pouvez utiliser la même manière. La valeur du décalage y sera négative. Et il sera disposé à partir du dessous de la ligne de base.