Sie können die capHeight der Schriftart verwenden.
Ziel 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];
Schnell
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)
Das Anhangsbild wird auf der Grundlinie des Textes gerendert. Und die y-Achse ist wie das Kerngrafikkoordinatensystem umgekehrt. Wenn Sie das Bild nach oben verschieben möchten, setzen Sie den Wert bounds.origin.y
auf positiv.
Das Bild sollte vertikal mittig mit der Höhe des Texts ausgerichtet sein. Also müssen wir die festlegen bounds.origin.y
zu (capHeight - imageHeight)/2
.
Um einen gezackten Effekt auf das Bild zu vermeiden, sollten wir den Bruchteil des y runden. Aber Schriftarten und Bilder sind normalerweise klein. Selbst ein Unterschied von 1 Pixel lässt das Bild falsch ausgerichtet aussehen. Also habe ich die Rundungsfunktion vor dem Teilen angewendet. Dadurch wird der Bruchteil des y-Werts auf .0 oder .5 gesetzt
In Ihrem Fall ist die Bildhöhe größer als die Großbuchstaben der Schriftart. Aber Sie können den gleichen Weg verwenden. Der Offset-y-Wert ist negativ. Und es wird von unten unter der Grundlinie angelegt.