글꼴의 capHeight를 사용할 수 있습니다.
목표 -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의 분수 부분을 반올림해야합니다. 그러나 글꼴과 이미지는 일반적으로 작으며 1px 차이로 인해 이미지가 잘못 정렬 된 것처럼 보입니다. 그래서 나누기 전에 round 함수를 적용했습니다. y 값의 분수 부분을 .0 또는 .5로 만듭니다.
귀하의 경우 이미지 높이는 글꼴의 capHeight보다 큽니다. 하지만 같은 방법으로 사용할 수 있습니다. 오프셋 y 값은 음수입니다. 그리고 그것은 기준선 아래에서 배치됩니다.