Ich möchte eine Zeichenfolge in einer einzigen Zeile auf einer UIView
zeichnen, die die Breite der angegebenen Rect (ähnlich wie adjustsFontSizeToFitWidth
für eine UILabel
tut, wenn die Anzahl der Zeilen = 1) passt. Ich versuche, die Schriftgröße zu berechnen, die wie unten angegeben in die richtige Größe passt.Wie berechnet man die Schriftgröße für einen bestimmten NSString, die genau auf die richtige Breite passt, wenn sie in einer Ansicht gezeichnet wird?
- (UIFont *)fontforWidth:(CGFloat)width String:(NSString *)stringToFit {
CGFloat widthForIdealFontSize = [self widthForIdealFontSizeWithString:stringToFit];
CGFloat requiredFontSize = (KIdealFontSize/widthForIdealFontSize*width);
return [UIFont fontWithName:self.fontName size:(requiredFontSize)];
}
- (CGFloat)widthForIdealFontSizeWithString:(NSString *)inputString {
NSAttributedString *attrString = [[NSAttributedString alloc]initWithString:inputString attributes:@{NSFontAttributeName:[UIFont fontWithName:self.fontName size:KIdealFontSize]}];
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attrString);
CGFloat ascent, descent, leading;
CGFloat width = CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
return width;
}
wo #define KIdealFontSize 1000. Ich nicht in der Lage bin, den genauen Wert der Schriftgröße für einige Schriftarten wie Zapfino, wo die Zeichenfolge abgeschnitten wird, wenn gezogen zu bekommen. Gibt es eine bessere Möglichkeit, die genaue Schriftgröße zu berechnen, die für alle Schriftarten die Breite passt?