Anda dapat menggunakan capHeight font.
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];
Cepat
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)
Gambar lampiran dirender pada garis dasar teks. Dan sumbu y dibalik seperti sistem koordinat grafik inti. Jika Anda ingin memindahkan gambar ke atas, setel bounds.origin.y
ke positif.
Gambar harus diratakan secara vertikal di tengah dengan capHeight teks. Jadi kita perlu menyetel bounds.origin.y
ke (capHeight - imageHeight)/2
.
Untuk menghindari beberapa efek bergerigi pada gambar, kita harus membulatkan bagian pecahan dari y. Tapi font dan gambar biasanya kecil, bahkan perbedaan 1px membuat gambar terlihat tidak sejajar. Jadi saya menerapkan fungsi bulat sebelum membagi. Itu membuat bagian pecahan dari nilai y menjadi 0,0 atau 0,5
Dalam kasus Anda, tinggi gambar lebih besar dari capHeight font. Tapi Anda bisa menggunakan cara yang sama. Nilai offset y akan menjadi negatif. Dan itu akan ditata dari bawah garis dasar.