Configurar el contentInset
puede ayudar a que el texto aparezca más correctamente en el UITextView
. Sin embargo, no ayudará a resolver el problema por el cual el UITextView
tiene habilitado el desplazamiento a pesar de no tener más texto para ver.
De forma similar, los métodos como sizeWithFont
tienen limitaciones. Como se explica en la excelente serie de blogs de Mike Weller iOS Development: You're Doing It Wrong, NSString
no es un buen objeto preguntar acerca de qué tan grande debe ser UIView
. Muchas subclases UIView
, como UILabel
, UIButton
, etc. tienen inserciones y otras consideraciones que deben tenerse en cuenta durante el dimensionamiento. UITextLabel
no es una excepción.
entrada en particular de Mike Weller sobre este tema es:
You're Doing It Wrong #2: Sizing labels with -[NSString sizeWithFont:...]
iOS 7 nos promete manejo de texto más sofisticados en UITextView
, con propiedades tales como textContainerInset
. Pero, ¿qué hacer mientras tanto?
Bueno, primero sabemos que UITextView
es una subclase de UIScrollView
.Por lo tanto, la regla de oro es que si el contentSize
es más grande que la propiedad bounds
de la vista, la vista de desplazamiento se desplazará para que podamos ver más contenido.
El registro de salida contentSize
Agains el bounds
no funcionará bien porque sabemos que UIScrollView
ya calculando si debe desplazarse o no basado en el texto, y que nos está dando la respuesta equivocada.
¡Aquí es donde los valores arbitrarios de ajuste vienen al rescate! Para mí, este valor era 17.f
. Para usted, dependiendo de sus fuentes, puede ser diferente. Luego tomamos el control y decidimos si debemos permitir que la vista de desplazamiento se desplace:
static const CGFloat kArbritaryHeight = 17.f;
CGFloat adjustedContentHeight = myTextView.contentSize.height - kArbritaryHeight;
CGFloat boundsHeight = CGRectGetHeight(myTextView.bounds);
BOOL tooMuchContent = adjustedContentHeight > boundsHeight;
if (tooMuchContent)
{
myTextView.scrollEnabled = YES;
}
else
{
myTextView.scrollEnabled = NO;
}