Envolver UITextView con boundingRectWithSize:

Estoy intentando actualizar dinámicamente la altura de una UITextView usando el siguiente código, pero el resultado es consistentemente desactivado por unos pocos píxeles que hacen que la vista de text se ajuste pero no se dimensione adecuadamente. Una vez que se ingresa otro personaje (o dos), la pantalla se actualiza correctamente.

He revisado varias publicaciones (muchas están desactualizadas porque hacen reference a sizeThatFits en desuso) y no veo nada diferente. Aquellos que usan boundingRectWithSize: (NSString o NSAttributedString, de los cuales he intentado ambos) se parecen a los siguientes:

CGRect boundingRect = [string boundingRectWithSize: CGSizeMake(CGRectGetWidth(textView.frame), CGFLOAT_MAX) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes: @{ NSFontAttributeName : textView.font } context: NULL]; float h = ceil(CGRectGetHeight(boundingRect)); textViewHeightLayoutConstraint.constant = h; 

Sé que lo primero que dirás es: inserciones. Aquí está mi código de configuration:

 textView.textContainerInset = UIEdgeInsetsZero; textView.contentInset = UIEdgeInsetsZero; textView.layoutMargins = UIEdgeInsetsZero; 

¿Hay otra configuration de inserciones?

Nota al margen: estoy usando MuseoSans como fuente.

Solución de pirateo

He "solucionado" el problema al comprobar si el ancho está dentro de un umbral (actualmente 9px de la testing) y si es así, pretendiendo que se agregó una línea adicional como tal:

 float fontHeight = ceil([@"lp" sizeWithAttributes: @{ NSFontAttributeName : textView.font }].height); if ((CGRectGetWidth(textView.frame) - ceil(CGRectGetWidth(boundingRect))) <= 9.f) h += fontHeight; 

Lo anterior me permite capturar la altura máxima posible y luego forzar su altura en mi vista de text. La vista de text se ajusta adecuadamente y muestra el text en la siguiente línea.

¿Ideas?

Pequeña actualización

Se agregó esto sin efecto:

 NSMutableParagraphStyle *paragraphStyle = [NSParagraphStyle.defaultParagraphStyle mutableCopy]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; CGRect boundingRect = [string boundingRectWithSize: CGSizeMake(CGRectGetWidth(textView.frame), CGFLOAT_MAX) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes: @{ NSFontAttributeName : textView.font, NSParagraphStyleAttributeName : paragraphStyle } context: NULL]; 

Encontré la respuesta Está dentro:

 textView.textContainer.lineFragmentPadding 

Necesitaba restar eso de mi ancho textView. Supongo que hay otra fuente de relleno además de los 3 sets de inserciones y márgenes.