2013-11-01 6 views
7

मैं एक जिम्मेदार स्ट्रिंग की ऊंचाई प्राप्त करने की कोशिश कर रहा हूं। यह उम्मीद के अनुसार काम कर रहा है:emojis के साथ तारों को जिम्मेदार ठहराया - उचित ऊंचाई

[attrString boundingRectWithSize:size 
         options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine) 
         context:NULL] 

... जब तक स्ट्रिंग में इमोजी नहीं होती है। Emojis के साथ, इस के साथ लेबल के नीचे स्ट्रिंग काट दिया जाता है। क्या मुझे कुछ खास करने की ज़रूरत है?

+0

पर इसे ठीक करने में सक्षम थे? मेरा ठीक यही मुद्दा है। – damirstuhec

उत्तर

3

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन किसी को भी यह उपयोगी लग सकता है, आप कोर टेक्स्ट पर जा सकते हैं और यह आपके लिए कड़ी मेहनत कर सकते हैं!

static inline CGSize OKASizeWithAttributedString(NSAttributedString *attributedString, CGFloat width) { 

    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString); 
    CGSize targetSize = CGSizeMake(width, CGFLOAT_MAX); 
    CGSize size = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, (CFIndex)[attributedString length]), NULL, targetSize, NULL); 
    CFRelease(framesetter); 

    return size; 
} 
+0

इससे मेरी मदद मिली। धन्यवाद। – user1105951

+0

@ ओलिवर एटकिन्सन: मैंने आपके कोड का उपयोग किया है। यह ठीक काम कर रहा है, लेकिन यदि पाठ में बहुत सी जगह है तो यह ठीक से काम नहीं करेगा। – bittu

+0

@ बिट्टू आप किस फ़ॉन्ट का उपयोग कर रहे हैं? सिस्टम द्वारा समर्थित फोंट के साथ यह ठीक है, कस्टम फोंट –

0
+(CGFloat)heightStringWithEmojis:(NSString*)str fontType:(UIFont *)uiFont ForWidth:(CGFloat)width { 

    // Get text 
    CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0); 
    CFAttributedStringReplaceString (attrString, CFRangeMake(0, 0), (CFStringRef) str); 
    CFIndex stringLength = CFStringGetLength((CFStringRef) attrString); 

    // Change font 
    CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef) uiFont.fontName, uiFont.pointSize, NULL); 
    CFAttributedStringSetAttribute(attrString, CFRangeMake(0, stringLength), kCTFontAttributeName, ctFont); 

    // Calc the size 
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString); 
    CFRange fitRange; 
    CGSize frameSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0), NULL, CGSizeMake(width, CGFLOAT_MAX), &fitRange); 

    CFRelease(ctFont); 
    CFRelease(framesetter); 
    CFRelease(attrString); 

    return frameSize.height; 

} 
संबंधित मुद्दे