Sto provando a utilizzare l'API stringa attribuita di iOS 6 per calcolare la dimensione del testo e ridurre la dimensione del carattere se necessario. Tuttavia, non riesco a farlo funzionare come dice la documentazione.Come rendere NSStringDrawingContext restringente il testo?
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);
Ma il testo non si riduce e viene troncato. actualScaleFactor
è sempre 1
. I risultati del registro sono:
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}}
Il risultato è lo stesso se utilizzo il metodo di disegno effettivo e non il metodo di misurazione. Se rimuovo lo stile di paragrafo, rende il testo a capo e non lo riduce. Se rimuovo lo stile di paragrafo E scelgo una dimensione che consente solo una riga di testo, anche il testo viene troncato anziché essere ridotto. Che c'è? C'è poca documentazione o risorse online che si occupano di NSStringDrawingContext
. E sto cercando di evitare l'uso di sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
che è deprecato in iOS 7.
ho lo stesso problema e appena possibile' t farlo funzionare ... – Pascal
Mi sono imbattuto nello stesso problema su iOS 8.actualScaleFactor non viene aggiornato per il contesto viene utilizzato contextingRectWithSize: options: attributes :: context: o with drawWithRect: options: attributes: context :. –