Cómo calcular la altura de un NSAttributedString con un ancho determinado en iOS 6

Posible duplicado:
Cómo get altura para NSAttributedString a un ancho fijo

Ahora NSAttributedString está disponible en iOS 6. Para fines de layout, quiero saber cómo calcular la altura requerida de una NSAttributedString con un ancho fijo. Estoy buscando algo que sea equivalente a NSString's - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size pero para NSAttributedString.

Para calcular el tamaño de dibujo de NSAttributedStrings, hay dos methods disponibles:

  1. - (CGSize)size no se puede usar porque no toma ningún ancho en consideración.
  2. He intentado - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context , pero de alguna manera no me da la altura correcta. Creo que el método es buggy. Si ejecuto el siguiente código, me da el bounding size: 572.324951, 19.000000 ignorando el ancho dado de 200. Debería darme algo así como 100 de altura.
     NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] init];
     NSDictionary * attributes = @ {NSFontAttributeName: [UIFont fontWithName: @ "HelveticaNeue" size: 15], NSForegroundColorAttributeName: [UIColor blueColor]};
     [attributedString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Atribuido String \ n" attributes: attributes]];
     [attributedString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Atribuido String \ n" attributes: attributes]];
     [attributedString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Atribuido String \ n" attributes: attributes]];
     [attributedString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Atribuido String \ n" attributes: attributes]];
     [attributedString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Atribuido String \ n" attributes: attributes]];

     CGRect frame = [attributedString boundingRectWithSize: CGSizeMake (200, 1000) opciones: 0 context: nil];
     NSLog (@ "tamaño límite:% f,% f", frame.size.width, frame.size.height);

Hay otros methods disponibles para Mac OS X, pero no para iOS.

La opción 2 funciona en iOS con los parameters adecuados.

 NSAttributedString *attrStr = ... // your attributed string CGFloat width = 300; // whatever your desinetworking width is CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 

Sin los valores adecuados para el parámetro de options obtendrá la altura incorrecta.

También se requiere que attrStr contenga un atributo de fuente. Sin una fuente, no hay forma de calcular correctamente el tamaño.

    Intereting Posts