作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用开源 UILabel 子类 STTweetLabel v2.22
( Github ) 并尝试在标签中显示表情符号。在我的测试中,代码似乎可以正确处理大多数情况,但有时我会看到:
只是想知道为什么会发生这种情况,以及我应该研究什么可能的解决方法..
谢谢!
-- 更新(添加用于从服务器解码字符串的代码)--
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/
我是一名优秀的程序员,十分优秀!