Dank an alle, die beantwortet, aber keiner war vollständige Antwort obwohl @ Raj Vorschlag NSString-RemoveEmoji mir um geholfen, die Lösung für dieses Ziel zu erreichen, ist es hier, es für jede Art funktioniert von Emojis
-(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;
}
Beschreibung
- Suchen Sie zuerst NSRange von allen Emoji in der Zeichenfolge, indem Sie NSString-RemoveEmoji Funktion verwenden, und in Array speichern.
- Geben Sie den abgerufenen Bereich an, um die Zeichen FONT SIZE auf Zeichen im Bereich anzuwenden.
Schließlich den generierten attributierten Text dem Label zuweisen.
self.label.attributedText=[self getAttributedEmojiString:EmojiDecoded(originalText)];
ich zwei Makros zur Codierung und Decodierung Emoji ist, da ich diese Werte auf Server speichern müssen und durch api zu lesen, unten sind die Makros.
#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]
Ich hoffe, es hilft jedem, der nach einer ähnlichen Lösung sucht.
Prost, und danke an alle.
Sie können die Attribute für eine Reihe von Emojis in der Zeichenfolge ändern. – holex