2013-04-12 5 views
10

Ich bin derzeitWie erhält man die NSString-Größe, wenn NSString Emojis enthält?

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 

die Größe eines NSString zu erhalten. Wenn diese Zeichenfolge jedoch Emojis enthält, scheint sie die Größe für das Literal-Unicode-Zeichen zu berechnen, anstatt die Größe des Emojis selbst zu berücksichtigen, wodurch die zurückgegebene Größe falsch dargestellt wird.

Wie bekomme ich richtig die Größe der Zeichenfolge mit Emoji-Zeichen, wie es in einem uilabel erscheint?

+2

Vielleicht könnten Sie ein konkretes (kurzes) Beispiel für eine Zeichenfolge, die berechnete Größe und die erwartete Größe angeben. –

+1

Ich habe gerade versucht mit einer Mischung aus verschiedenen Emoji und Roman Zeichen, verschiedene Schriftarten, und die Größe ist immer korrekt ... Vielleicht ist das Problem mit Ihrem 'ConstrainedToSize:' Parameter, der zu klein ist, um die Zeichenfolge zu enthalten .. – Guillaume

+1

Standardmäßig werden alle Emoji unabhängig von der Schriftgröße in einer festen Größe dargestellt, und sowohl NSString als auch UIFont ignorieren die Schriftgröße vollständig. Ich glaube, dass Emoji-Zeichen auf iOS immer mit etwa 20px (nicht Retina) gezeichnet werden, so dass sie nicht korrekt mit dem Rest der Zeichenfolge gemessen werden. –

Antwort

2

Der NSString stellt das Emoji nicht dar, da es eine Zeichenkette darstellt, so dass sizeWithFont nur die Zeichenkette berücksichtigt.

Ich würde verwenden:

CGRect labelFrame = label.frame; 
labelFrame.size = [label sizeThatFits:CGSizeMake(100, 9999)]; 
[label setFrame:labelFrame]; 

oder

//Alternatively 
[label sizeToFit]; 

Bare daran, dass sizeToFit ruft die sizeThatFits: Methode, so in Bezug auf die gerade das Etikett auf die richtige Höhe einstellen, sizeThatFits: schneller und viel einfacher für das Auge.

+1

Es tut mir leid, dass ich enttäusche, aber Sie werden feststellen, dass dies das Problem nicht lösen wird, wie in meinem Stack hier: http: // stackoverflow. com/questions/19537354/emojis-messing-mit-obj-cs-sizewithfont-math –

1

Ich hatte eine Zeitlang mit dieser Sache zu kämpfen und versuchte mehrere Lösungen einschließlich der akzeptierten Antwort, die für mich nicht funktionierte. Ich löste das, indem ich einen NSAttributed String mit dem Text erstellte und dann die NSAttributedString-Methode boundingRectWithSize verwendete: options: context: um die Größe des Strings zu erhalten.

NSString *text = //some text 
CGFloat maxSize = //text size constraints 

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text 
                     attributes:@{NSFontAttributeName : font 
                        }]; 

CGRect boundingRect = [attributedString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
CGSize fitSize = boundingRect.size;