Estoy tratando de ajustar la altura de la celda para una de las celdas en mi vista de tabla. Estoy ajustando el tamaño de la configuración de "altura de fila" dentro del "inspector de tamaño" de la celda en cuestión. Cuando ejecuto la aplicación en mi iPhone, la celda tiene el tamaño predeterminado establecido en el "tamaño de fila" en la vista de tabla.
Si cambio el "tamaño de fila" de la vista de tabla, el tamaño de todas las celdas cambia. No quiero hacer eso, ya que quiero un tamaño personalizado solo para una celda. He visto muchas publicaciones que tienen una solución programática al problema, pero preferiría hacerlo a través del guión gráfico, si es posible.
fuente
UITableView
contenido deDynamic Prototypes
aStatic Cells
, lo hice, y todo mi proyecto explotó ... casi me mato.Si usa UITableViewController, implemente este método:
En la función de una fila, puede elegir Altura. Por ejemplo,
En este ejemplo, la altura de la primera fila es de 100 píxeles y las otras son de 60 píxeles.
Espero que este te pueda ayudar.
fuente
Para celdas dinámicas,
rowHeight
establecer enUITableView
siempre anula las celdas individuales 'rowHeight
.Este comportamiento es, en mi opinión, un error. Cada vez que tenga que administrar su interfaz de usuario en dos lugares, es propenso a errores. Por ejemplo, si cambia el tamaño de su celda en el guión gráfico, también debe recordar cambiarlos en el
heightForRowAtIndexPath:
. Hasta que Apple corrija el error, la mejor solución actual es anularheightForRowAtIndexPath:
, pero usar las celdas prototipo reales del guión gráfico para determinar la altura en lugar de usar números mágicos . Aquí hay un ejemplo:Esto asegurará que cualquier cambio en la altura de las celdas de su prototipo se detecte automáticamente en tiempo de ejecución y solo necesita administrar su IU en un solo lugar: el guión gráfico.
fuente
He creado el código que sugieren las diversas respuestas / comentarios para que funcione para guiones gráficos que usan celdas prototipo.
Este código:
Gracias a Answerbot, Brennan y Lensovet.
fuente
En realidad, hay dos lugares donde debe cambiar a la altura de la fila, primero la celda (ya lo cambió) y ahora seleccione la Vista de tabla y verifique el Inspector de tamaño
fuente
Creo que es un error.
Intente ajustar la altura no mediante el inspector de utilidades, sino arrastrando el mouse directamente al guión gráfico.
Resolví este problema con este método.
fuente
Si está usando swift, úselo de esta manera. No use el guión gráfico para seleccionar la altura de la fila. Establezca programáticamente la altura de la fila de la tabla de esta manera,
fuente
cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Puede obtener la altura de UITableviewCell (en UITableviewController - celdas estáticas) del guión gráfico con la ayuda de las siguientes líneas.
fuente
Abra el guión gráfico en la vista XML e intente editar el
rowHeight
atributo del elemento deseado.Funcionó para mí cuando traté de configurar la fila personalizada Altura para mi fila prototipo. No funciona a través del inspector, pero a través de XML funciona.
fuente
Puede usar un prototipo
cells
con una costumbreheight
, y luego invocarcellForRowAtIndexPath:
y devolver suframe.height
.:.fuente
Si desea establecer una altura de fila estática, puede hacer algo como esto:
fuente
Recientemente he estado luchando con esto. Mi problema fue que las soluciones publicadas anteriormente que usan el
heightForRowAtIndexPath:
método funcionarían para iOS 7.1 en el Simulador, pero luego han arruinado completamente los resultados simplemente cambiando a iOS 8.1.Comencé a leer más sobre las celdas de tamaño propio (introducido en iOS 8, leer aquí ). Era evidente que el uso de
UITableViewAutomaticDimension
ayudaría en iOS 8. Intenté usar esa técnica y eliminé el uso deheightForRowAtIndexPath:
y listo, ahora funcionaba perfectamente en iOS 8. Pero entonces iOS 7 no lo fue. ¿Qué iba a hacer yo? NecesitabaheightForRowAtIndexPath:
para iOS 7 y no para iOS 8.Aquí está mi solución (recortada por razones de brevedad) que toma prestada de la respuesta @JosephH publicada anteriormente:
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") en realidad proviene de un conjunto de definiciones de macro que estoy usando y que encontré en alguna parte (muy útil). Se definen como:
fuente
El mismo problema ocurrió cuando trabajaba en XCode 9 usando Swift 4 .
Agregue AutoLayout para los elementos de la interfaz de usuario dentro de la celda y la altura de fila de celda personalizada funcionará según lo especificado.
fuente
Para celdas dinámicas, rowHeight establecido en UITableView siempre anula la fila de celdas individuales. Simplemente calcule la altura dinámica si el contenido dentro de la fila.
fuente
La única solución real que pude encontrar es esta
Esto funciona y permite no tener un interruptor horrible / si duplica la lógica ya en el StoryBoard. No estoy seguro sobre el rendimiento, pero supongo que al llegar
cellForRow:
la celda que ya está inicializado es tan rápido. Por supuesto, probablemente haya daños colaterales aquí, pero parece que funciona bien para mí aquí.También publiqué esto aquí: https://devforums.apple.com/message/772464
EDITAR: Ortwin Gentz me recordó que
heightForRowAtIndexPath:
se convocará a todos celdas de TableView, no solo a las visibles. Suena lógico ya que iOS necesita saber la altura total para poder mostrar las barras de desplazamiento correctas. Significa que probablemente esté bien en TableViews pequeños (como 20 celdas), pero olvídalo en un TableView de 1000 celdas.Además, el truco anterior con XML: igual que el primer comentario para mí. El valor correcto ya estaba allí.
fuente
Agregado como un comentario, pero publicado como una respuesta para la visibilidad:
También parece haber un problema si inicialmente configura una vista de tabla como "celdas estáticas" y luego la cambia a "prototipos dinámicos". Tuve un problema en el que incluso el método de delegado
heightForRowAtIndexPath
se ignoraba. Primero lo resolví editando directamente el XML del guión gráfico, luego finalmente reconstruí la escena del guión gráfico desde cero, utilizando prototipos dinámicos desde el principio.fuente
Dado que no encontré ninguna solución a este problema a través de Interface Builder, decidí publicar una solución programática para el problema en Swift usando dos celdas dinámicas , a pesar de que la pregunta inicial pedía una solución a través de Interface Builder. Independientemente, creo que podría ser útil para la comunidad de Stack Overflow:
fuente
Otra cosa que puede hacer es ir al Esquema del documento, seleccionar la vista de tabla en la que está anidada su celda prototipo. Luego, en el Inspector de tamaño, cambie la altura de fila de la vista de tabla al valor deseado y desactive la casilla Automático.
fuente