आप फ़ॉन्ट के capHeight का उपयोग कर सकते हैं।
उद्देश्य सी
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
सकारात्मक को सेट करें ।
छवि को पाठ के कैपहाइट के साथ लंबवत केंद्र में संरेखित किया जाना चाहिए। तो हम करने के लिए सेट करने की जरूरत bounds.origin.y
है (capHeight - imageHeight)/2
।
छवि पर कुछ दांतेदार प्रभाव से बचने के लिए, हमें y के अंश भाग को गोल करना चाहिए। लेकिन फोंट और छवियां आम तौर पर छोटी होती हैं, यहां तक कि 1px अंतर भी छवि को गलत लगता है। इसलिए मैंने विभाजित होने से पहले राउंड फ़ंक्शन को लागू किया। यह y मान के अंश को .0 या .5 बनाता है
आपके मामले में, छवि की ऊंचाई फ़ॉन्ट की कैपहाइट से बड़ी है। लेकिन आप उसी तरह का उपयोग कर सकते हैं। ऑफसेट y मान ऋणात्मक होगा। और इसे आधार रेखा के नीचे से बाहर रखा जाएगा।