Como fazer NSStringDrawingContext encolher o texto?
Estou tentando usar a API de string atribuída do iOS 6 para calcular o tamanho do texto e reduzir o tamanho da fonte, se necessário. No entanto, não consigo fazê-lo funcionar como diz a documentação.
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);
Mas o texto não encolhe e é truncado.actualScaleFactor
é sempre1
. Os resultados do log são:
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}}
O resultado é o mesmo se eu usar o método de desenho real e não o método de medição. Se eu remover o estilo de parágrafo, ele fará com que o texto seja quebrado e não o encolha. Se eu remover o estilo de parágrafo E eu escolher um tamanho que permita apenas uma linha de texto, o texto também será truncado em vez de ser reduzido. O que está errado? Há muito pouca documentação ou recursos online que lidam comNSStringDrawingContext
. E estou tentando evitar o uso desizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
que está obsoleto no iOS 7.