フォントのcapHeightを使用できます。
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];
迅速
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)
添付画像はテキストのベースラインにレンダリングされます。また、コアグラフィックス座標系と同様に、Y軸が反転しています。画像を上に移動する場合はbounds.origin.y
、正に設定します。
画像はテキストのcapHeightと垂直方向の中央に配置する必要があります。だから我々は、設定する必要がありますbounds.origin.y
し(capHeight - imageHeight)/2
。
画像のギザギザな影響を避けるために、yの小数部分を丸める必要があります。ただし、フォントと画像は通常小さいため、1ピクセルの違いでも画像がずれているように見えます。そのため、除算する前にラウンド関数を適用しました。y値の小数部を.0または.5にします
あなたの場合、画像の高さはフォントのcapHeightよりも大きいです。ただし、同じ方法で使用できます。オフセットyの値は負になります。そして、ベースラインの下からレイアウトされます。