Спасибо всем, кто ответил, но ни один не был полный ответ, хотя @ предложение Раджа смотреть NSString-RemoveEmoji помог мне добиться решения для этого, вот оно, это работает для любого вида из смайликам
-(NSMutableAttributedString *)getAttributedEmojiString:(NSString *)inputString{
NSMutableArray *__block emojiRange=[[NSMutableArray alloc] init];
[inputString enumerateSubstringsInRange:NSMakeRange(0, [inputString length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
if([substring isEmoji]){
[emojiRange addObject:@{@"startrange":@(substringRange.location),@"endrange":@(enclosingRange.length)}];
}
}];
NSMutableAttributedString *mutString=[[NSMutableAttributedString alloc] initWithString:inputString];
[mutString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0] range:NSMakeRange(0, mutString.length)];
[emojiRange enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[mutString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:35.0] range:NSMakeRange([obj[@"startrange"] floatValue], [obj[@"endrange"] floatValue])];
}];
return mutString;
}
Описание
- Сначала найдите NSRange всех emoji в строке, используя NSString-RemoveEmoji функция
isEmoji
и хранить в массиве.
- Поставка выбранного диапазона для применения больше FONT SIZE для символов в ассортименте.
Наконец, присвойте сгенерированный атрибутный текст этикетке.
self.label.attributedText=[self getAttributedEmojiString:EmojiDecoded(originalText)];
Я использую два макроса для кодирования и декодирования Emoji-х так как мне нужно, чтобы сохранить эти значения на сервер и читать через API, ниже макросы.
#define Encoded(val) [[val dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0]
#define Decoded(val) [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:val options:0] encoding:NSUTF8StringEncoding]
#define EmojiEncoded(val) [[NSString alloc] initWithData:[val dataUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding]
#define EmojiDecoded(val) [[NSString alloc] initWithData:[val dataUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding]
Надеюсь, что это поможет любому, кто ищет подобное решение.
Приветствия, и спасибо всем.
вы можете изменить атрибуты для набора emojis в строке. – holex