Yazı tipinin capHeight değerini kullanabilirsiniz.
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];
hızlı
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)
Ek resmi, metnin taban çizgisinde oluşturulur. Ve bunun y ekseni, çekirdek grafik koordinat sistemi gibi ters çevrilir. Görüntüyü yukarı taşımak istiyorsanız, bounds.origin.y
pozitif olarak ayarlayın .
Resim, metnin capHeight değeri ile dikey olarak ortaya hizalanmalıdır. Bu yüzden ayarlamanız gerekir bounds.origin.y
için (capHeight - imageHeight)/2
.
Görüntü üzerinde pürüzlü bir etkiden kaçınarak, y'nin kesir kısmını yuvarlamalıyız. Ancak yazı tipleri ve resimler genellikle küçüktür, 1 piksel fark bile görüntünün yanlış hizalanmış gibi görünmesine neden olur. Bu yüzden bölmeden önce yuvarlak işlevini uyguladım. Y değerinin kesir kısmını .0 veya .5 yapar
Sizin durumunuzda, görüntü yüksekliği yazı tipinin capHeight değerinden daha büyük. Ama aynı şekilde kullanabilirsiniz. Ofset y değeri negatif olacaktır. Ve taban çizgisinin altından düzenlenecek.