¿Existe un método equivalente al sizeWithFont:
de NSString que se puede usar para calcular la altura del texto en una UITectView para un ancho determinado? Todos los métodos de NSString solo operan en una sola línea de lo que puedo decir.NSString sizeWithFont: para líneas múltiples?
Respuesta
De Apple's reference para estos métodos de NSString, puede usar -sizeWithFont:constrainedToSize:
o -sizeWithFont:constrainedToSize:lineBreakMode:
para "Métrica de cálculo para múltiples líneas de texto".
CGSize size = [theString sizeWithFont:font
constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
Para UITextView
, todo lo que tiene que hacer es llamar -sizeToFit
en la vista, y se cambiará automáticamente el tamaño de su altura hasta que pueda caber todo el texto disponible. Todo lo que necesita hacer es establecer el ancho de la vista de texto, configurar el texto, luego llamar al -sizeToFit
. La vista de texto cambiará el tamaño de su altura lo suficiente como para ajustarse a todo el texto.
ACTUALIZACIÓN:
de texto Al parecer vistas solamente se contraen cuando hay exceso de altura, pero que no crecen si hay suficiente altura para mostrar todo el texto. Además, una vez que llame al -sizeToFit
, la coordenada y
de la vista de texto se reinicia a 0.0f
. Así que esto es lo que hace:
CGFloat textViewWidth = 300.0f;
CGFloat textViewPadding = 10.0f;
UITextView * textView = [[[UITextView alloc] init] autorelease];
textView.text = ...; // Really long string
textView.frame = CGRectMake(0.0f, 0.0f, textViewWidth, CGFLOAT_MAX);
[textView sizeToFit]; // Shrinks the height to fit all the text
textView.frame = CGRectMake(textViewPadding, textViewPadding,
textViewWidth, textView.frame.size.height);
[self.view addSubview:textView];
Primero, establece el marco para que pueda establecer el ancho como desee. Utiliza CGFLOAT_MAX
para indicar bastante altura infinita. A continuación, al llamar al -sizeToFit
se reduce la altura hasta que se ajuste a todo el texto. Sin embargo, también se restablece el y
de coordenadas, por lo que seguir adelante y establecer el marco de nuevo para configurar los x
y y
coordenadas-en este ejemplo, 10.0f
tanto para x
y y
-, dejando el ancho solo y manteniendo la altura establecida a lo -sizeToFit
calculado.
Parece que no cambia nada. – Jumhyn
Aclaré cómo 'UITextView' realmente funciona. Hacer algo como el código de muestra que agregué debería resultar en una vista de texto que sea lo suficientemente alta como para caber todo el texto. – LucasTizma
CGFLOAT_MAX causó algunos funky manchas/rasgaduras en iPhone 5.1 cuando el UITextView renunció a la primera respuesta y el UITableView se desplazó de nuevo a la parte superior. Un número más pequeño como 1024.0f (lado largo del iPad) lo arregló para mí. –
En realidad, podría utilizar la propiedad contentSize.
- 1. ¿Qué es - [NSString sizeWithFont: forWidth: lineBreakMode:] bueno para?
- 2. NSString sizeWithFont: constrainedToSize: devolver la altura incorrecta en retina muestra
- 3. iPhone UILabel sizeWithFont:
- 4. sizeWithFont con MonoTouch
- 5. Declarar un NSString en varias líneas
- 6. PHP Líneas Múltiples comentario dentro de Líneas Múltiples comentario
- 7. ggplot: Líneas múltiples para un Color/clase
- 8. Grep ignora líneas múltiples
- 9. HUD con líneas múltiples
- 10. Java 7 - líneas múltiples
- 11. Sed Insertar Líneas Múltiples
- 12. PHP múltiples líneas nuevas
- 13. ¿Por qué sizeWithFont: constrainedToSize: lineBreakMode devuelve un tamaño incorrecto?
- 14. ¿Cuál es el método equivalente "sizeWithFont:" para Mac?
- 15. romper con los largos formato NSString en varias líneas
- 16. - [NSString stringByAppendingPathComponent:] o simplemente - [NSString stringByAppendingFormat:] para NSStrings para NSURLs?
- 17. elipsis para texto de líneas múltiples en Chrome
- 18. En Java, ¿cuál es la sintaxis para comentar múltiples líneas?
- 19. vim: elimine los primeros 2 espacios para líneas múltiples
- 20. Utilidad de anotación Java para texto de líneas múltiples
- 21. NSString isEqualToString: para \ n
- 22. Python - Reescribe múltiples líneas en la consola
- 23. NSIS ¿Cómo dividir cadenas en múltiples líneas?
- 24. mailto enlazar múltiples líneas de la carrocería
- 25. Obtener la altura NSString
- 26. Grupo de líneas múltiples en campos múltiples - VB.NET, Anónimo, clave
- 27. Javascript - string.replace() texto que abarca múltiples líneas?
- 28. Cadenas de líneas múltiples en JSON
- 29. múltiples "líneas principales" en módulos OCaml vinculados
- 30. CodeMirror 2: Múltiples sangría está eliminando líneas
Eso es exactamente lo que he usado para determinar la altura de varias líneas. Básicamente, simplemente establece la altura posible en un valor realmente grande, y recupera el tamaño real que se ajusta al texto envuelto en varias líneas. –
Esto parece devolver un valor de 1-2 líneas demasiado pequeño. ¿Alguna idea de por qué? – Jumhyn
@Jumhyn: pruebe con el método '-drawInRect:' para dibujar la cadena para verificar si se ajusta en el lugar correcto. – kennytm