Wie man NSStringDrawingContext text verkleinern?

Ich versuche, die zugeschrieben string-API von iOS 6 so berechnen Sie die Größe von text und verkleinern Sie die Schriftgröße, wenn nötig. Allerdings kann ich es nicht zu funktionieren, wie die Dokumentation sagt.

NSString *string = @"This is a long text that doesn't shrink as it should";

NSStringDrawingContext *context = [NSStringDrawingContext new];
context.minimumScaleFactor = 0.5;

UIFont *font = [UIFont fontWithName:@"SourceSansPro-Bold" size:32.f];

NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.lineBreakMode = NSLineBreakByClipping;

NSDictionary *attributes = @{ NSFontAttributeName: font,
                              NSParagraphStyleAttributeName: paragraphStyle };

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.title attributes:attributes];

CGRect rect = [attributedString boundingRectWithSize:CGSizeMake(512.f, 512.f) options:NSStringDrawingUsesLineFragmentOrigin context:context];

NSLog(@"rect: %@, context: %@", NSStringFromCGRect(rect), context.debugDescription);

Aber der text nicht verkleinern und abgeschnitten. actualScaleFactor ist immer 1. Die log-Ergebnisse:

rect:{{0, 0}, {431.64801, 80.447998}}, context:<NSStringDrawingContext: 0x14e85770> minimumScaleFactor:0.500000 minimumTrackingAdjustment:0.000000 actualScaleFactor:1.000000 actualTrackingAdjustment:0.000000 totalBounds:{{0, 0}, {431.64801, 80.447998}}

Das Ergebnis ist das gleiche, wenn ich mit der eigentlichen Zeichnung-Methode und nicht die Messmethode. Wenn ich Entferne den Absatz-Stil, es macht den text wrap und nicht schrumpfen. Wenn ich Entferne den Absatz-Stil, UND ich wählen Sie eine Größe, die erlaubt nur eine Zeile text, wird der text abgeschnitten zu sein statt geschrumpft. Was ist falsch? Es gibt sehr wenig Dokumentation oder online-Ressourcen, die den Umgang mit NSStringDrawingContext. Und ich versuche zu vermeiden, die Verwendung von sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: die veraltet ist in iOS 7.

  • Ich habe das gleiche problem und kann einfach nicht damit es funktioniert...
  • Ich lief in das gleiche problem auf iOS 8. actualScaleFactor nicht aktualisiert wird, ist Kontext verwendet wird, für boundingRectWithSize:Optionen:Attribute::Kontext: oder mit drawWithRect:Optionen:Attribute:context:.
InformationsquelleAutor Guillaume | 2013-07-13
Schreibe einen Kommentar