UILabel显示表情符号

时间:2019-10-13 14:07:40

标签: ios objective-c uilabel

我有一个UILabel,它显示的表情符号不正确。

这是iOS应用的屏幕截图: enter image description here

这是Android应用程序的屏幕截图,该屏幕截图正确显示了与表情符号相同的文本。 enter image description here

我尝试了here的答案,但没有帮助。

示例字符串:"تم البيع والله يبارك للمشتري♥️"

代码如下:

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:comment.body];
UIFont *cellFont = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];

NSDictionary *attributesDictionary;
NSMutableParagraphStyle *paragraphStyle =
[[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 10;
paragraphStyle.alignment = NSTextAlignmentRight;
paragraphStyle.allowsDefaultTighteningForTruncation = true;

attributesDictionary = @{
                         NSParagraphStyleAttributeName : paragraphStyle,
                         NSFontAttributeName : cellFont,
                         NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                         NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)
                         };

[str addAttributes:attributesDictionary
             range:NSMakeRange(0, str.length)];

cell.commentTextLabel.attributedText = str;

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用表情符号的unicode。 在您的情况下,红色心脏的unicode是:U + 2764 U + FE0F。

  • 目标C代码:

    cell.commentTextLabel.text = @"تم البيع والله يبارك للمشتري \U00002764 \U0000FE0F";
    
  • 快捷代码:

    cell.commentTextLabel.text = "تم البيع والله يبارك للمشتري \u{2764} \u{FE0F}"
    

有关更多表情符号,请在Xcode中转到编辑-> 表情符号和符号,选择一个表情符号,然后右键单击它,然后单击复制字符信息 >按钮。粘贴它,您将获得红色的心:

❤️
red heart
Unicode: U+2764 U+FE0F, UTF-8: E2 9D A4 EF B8 8F

答案 1 :(得分:0)

我可以通过使用以下代码解决此问题:

    NSData *data = [comment.body dataUsingEncoding:NSUTF16StringEncoding allowLossyConversion:false];

    NSMutableAttributedString *str = [[NSMutableAttributedString alloc ] initWithData:data options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];
    UIFont *cellFont = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];

    NSDictionary *attributesDictionary;
    NSMutableParagraphStyle *paragraphStyle =
    [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 10;
    paragraphStyle.alignment = NSTextAlignmentRight;

    attributesDictionary = @{
        NSParagraphStyleAttributeName : paragraphStyle,
        NSFontAttributeName : cellFont
    };

    [str addAttributes:attributesDictionary range:NSMakeRange(0, str.length)];

    cell.commentTextLabel.attributedText = str;

在这里comment.body是从服务器获取的包含表情符号的字符串。

结果是这样的:

enter image description here

感谢Larme在评论中的帮助。