gpt4 book ai didi

iOS 表情符号在 UILabel 中搞砸了

转载 作者:行者123 更新时间:2023-11-28 22:00:56 26 4
gpt4 key购买 nike

我正在使用开源 UILabel 子类 STTweetLabel v2.22 ( Github ) 并尝试在标签中显示表情符号。在我的测试中,代码似乎可以正确处理大多数情况,但有时我会看到:

enter image description here

只是想知道为什么会发生这种情况,以及我应该研究什么可能的解决方法..

谢谢!

-- 更新(添加用于从服务器解码字符串的代码)--

 NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSString *decoded = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];

最佳答案

您好,我为该库提供了一个解决方案,您可以使用表情符号找到高度。请使用<CoreText/CoreText.h>框架和使用下面的代码。

  - (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 +4;

}

让我知道想法....!!!

关于iOS 表情符号在 UILabel 中搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com