¿Cómo hacer que NSStringDrawingContext reduzca el texto?
Estoy tratando de usar la API de cadena atribuida de iOS 6 para calcular el tamaño del texto y reducir el tamaño de la fuente si es necesario. Sin embargo, no puedo hacer que funcione como dice la documentación.
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);
Pero el texto no se encoge y se trunca.actualScaleFactor
es siempre1
. Los resultados del registro son:
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}}
El resultado es el mismo si utilizo el método de dibujo real y no el método de medición. Si quito el estilo de párrafo, hace que el texto se ajuste y no lo reduzca. Si elimino el estilo de párrafo Y elijo un tamaño que solo permite una línea de texto, el texto también se trunca en lugar de reducirlo. ¿Qué está mal? Hay muy poca documentación o recursos en línea que tratan conNSStringDrawingContext
. Y estoy tratando de evitar el uso desizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
que está en desuso en iOS 7.