UILabel дисплей смайликов - PullRequest
0 голосов
/ 13 октября 2019

У меня есть UILabel, который неправильно отображает смайлики.

Вот скриншот из приложения iOS: enter image description here

А вот скриншот изAndroid-приложение, которое правильно отображает тот же текст с эмодзи. enter image description 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 голосов
/ 17 октября 2019

Мне удалось решить эту проблему с помощью следующего кода:

    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

Спасибо Ларме за помощь в комментариях.

0 голосов
/ 15 октября 2019

Используйте юникод эмодзи. в вашем случае юникод для красного сердца: U + 2764 U + FE0F.

  • Код объективного C:

    cell.commentTextLabel.text = @"تم البيع والله يبارك للمشتري \U00002764 \U0000FE0F";
    
  • Код Swift:

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

Для большего количества смайликов, в Xcode перейдите Редактировать -> Emoji & Symbols , выберите смайлик, затем щелкните правой кнопкой мышии нажмите Скопировать информацию о персонаже Кнопка. Вставьте его, и вы получите за красное сердце:

❤️
red heart
Unicode: U+2764 U+FE0F, UTF-8: E2 9D A4 EF B8 8F
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...