Puoi usare capHeight del carattere.
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];
veloce
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'immagine dell'allegato viene visualizzata sulla linea di base del testo. E l'asse y è invertito come il sistema di coordinate grafico principale. Se vuoi spostare l'immagine verso l'alto, imposta bounds.origin.y
su positivo.
L'immagine dovrebbe essere allineata verticalmente al centro con il capHeight del testo. Quindi dobbiamo impostare il filebounds.origin.y
su (capHeight - imageHeight)/2
.
Evitando qualche effetto frastagliato sull'immagine, dovremmo arrotondare la parte frazione di y. Ma i caratteri e le immagini sono generalmente piccoli, anche 1 pixel di differenza fa sembrare l'immagine disallineata. Quindi ho applicato la funzione round prima di dividere. Rende la parte frazione del valore y a .0 o .5
Nel tuo caso, l'altezza dell'immagine è maggiore del capHeight del carattere. Ma puoi usare allo stesso modo. Il valore di offset y sarà negativo. E sarà disposto dal basso della linea di base.