Después de actualizar a Xcode 6.1 beta 2 cuando ejecuto mi aplicación que contiene celdas de vista de tabla, el asistente de depuración dice:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Antes, cuando usaba Xcode 5 en este proyecto, recibía algunos errores, pero esos han desaparecido desde que actualicé. No tengo otros errores o advertencias ahora. Ya he intentado ajustar los tamaños de todas las celdas de vista de tabla y también he intentado usar la altura estándar, pero sigo recibiendo la misma advertencia:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
También he leído todos los temas similares sobre esto, pero ninguna de sus soluciones ayuda. Cuando pruebo la aplicación con el simulador, la aplicación funciona bien, excepto las imágenes que se supone que están en las celdas tableView no están allí.
ios
objective-c
swift
xcode
uitableview
David E
fuente
fuente
Respuestas:
Tres cosas han logrado silenciar esta advertencia hasta ahora. Puede recoger el más conveniente para usted. Sin embargo, nada bonito.
Para configurar la altura de celda predeterminada en viewDidLoad
Vaya al guión gráfico y cambie la altura de la fila en su vista de tabla a algo diferente de 44.
Para implementar el método de delegado de tableview heightForRowAtIndexPath
Extraño.
fuente
self.tableView.rowHeight = 44;
el incorrecto. El error se fue! graciasSe encuentra con el efecto secundario de una nueva característica fantástica en las Vistas de tabla de iOS8: Alturas de fila automáticas.
En iOS 7, tenía filas de un tamaño fijo (configurado con
tableView.rowHeight
), o escribiría un código para calcular la altura de sus celdas y lo devolveríatableView:heightForRowAtIndexPath
. Escribir código para el cálculo de la altura de una celda podría ser bastante complejo si tuviera numerosas vistas en su celda y tuviera diferentes alturas para considerar en diferentes tamaños de fuente. Agregue Dynamic Type y el proceso fue un dolor en el culo.En iOS 8, aún puede hacer lo anterior, pero ahora iOS puede determinar la altura de las filas, siempre que haya configurado el contenido de su celda mediante el Diseño automático. Este es un gran beneficio para los desarrolladores, porque a medida que cambia el tamaño dinámico de la fuente, o el usuario modifica el tamaño del texto usando la Configuración de Accesibilidad, su IU puede adaptarse al nuevo tamaño. También significa que si tiene un UILabel que puede tener varias filas de texto, su celda ahora puede crecer para acomodarlas cuando las celdas lo necesiten y encogerse cuando no es necesario, por lo que no hay espacios en blanco innecesarios.
El mensaje de advertencia que está viendo le dice que no hay suficientes restricciones en su celda para que el Diseño automático informe a la vista de tabla de la altura de la celda.
Para usar la altura de celda dinámica, que, junto con las técnicas ya mencionadas por otros carteles, también eliminarán este mensaje, debe asegurarse de que su celda tenga suficientes restricciones para unir los elementos de la IU a la parte superior e inferior de la celda. Si ha utilizado el diseño automático anteriormente, probablemente esté acostumbrado a establecer restricciones superiores + iniciales, pero la altura de fila dinámica también requiere restricciones inferiores.
El pase de diseño funciona así, lo que ocurre inmediatamente antes de que se muestre una celda en la pantalla, de manera justo a tiempo:
Se calculan las dimensiones para contenido con tamaños intrínsecos. Esto incluye UILabels y UIImageViews, donde sus dimensiones se basan en el texto o UIImages que contienen, respectivamente. Ambas vistas considerarán que su ancho es conocido (porque ha establecido restricciones para los bordes finales / iniciales, o ha establecido anchos explícitos, o ha usado restricciones horizontales que eventualmente revelan un ancho de lado a lado). Digamos que una etiqueta tiene un párrafo de texto ("número de líneas" se establece en 0 para que se ajuste automáticamente), solo puede tener 310 puntos de ancho, por lo que se determina que tiene 120 puntos de altura con el tamaño de fuente actual.
La interfaz de usuario se presenta de acuerdo con sus restricciones de posicionamiento. Hay una restricción en la parte inferior de la etiqueta que se conecta con el margen inferior de la celda. Dado que la etiqueta ha crecido hasta 120 puntos de alto, y como está limitada al fondo de la celda por la restricción, debe empujar la celda hacia "abajo" (aumentando la altura de la celda) para satisfacer la restricción que dice "parte inferior de la celda". la etiqueta siempre está a una distancia estándar de la parte inferior de la celda.
El mensaje de error que informó se produce si falta esa restricción inferior, en cuyo caso no hay nada para "empujar" la parte inferior de la celda lejos de la parte superior de la celda, que es la ambigüedad que se informa: sin nada para empujar la parte inferior En la parte superior, la célula se derrumba. Pero el diseño automático también lo detecta y vuelve a utilizar la altura de fila estándar.
Para lo que vale, y sobre todo para tener una respuesta redondeada, si implementa las alturas de fila dinámicas basadas en el diseño automático de iOS 8, debe implementar
tableView:estimatedHeightForRowAtIndexPath:
. Ese método de estimación puede usar valores aproximados para sus celdas, y se llamará cuando la vista de tabla se cargue inicialmente. Ayuda a UIKit a dibujar cosas como la barra de desplazamiento, que no se puede dibujar a menos que la vista de tabla sepa cuánto contenido puede desplazarse, pero no necesita tamaños totalmente precisos, ya que es solo una barra de desplazamiento. Esto permite diferir el cálculo de la altura real de la fila hasta el momento en que se necesita la celda, lo cual es menos computacionalmente intenso y permite que su UITableView se presente más rápido.fuente
Tuve este problema después de crear una costumbre
UITableViewCell
y agregar mis subvistas a la celda en lugar de sucontentView
.fuente
Para resolver esto sin un método programático, ajuste la altura de la fila de la vista de tabla en el Inspector de tamaño del guión gráfico.
fuente
Este es un problema de autolayout. Asegúrese de que sus subvistas tengan todas las restricciones. Para mí, faltaba la restricción inferior para la Etiqueta del título en la celda. Cuando agregué eso, la advertencia desapareció y todo apareció perfectamente.
fuente
Simplemente habilite las celdas de vista de tabla de tamaño automático
& asegúrese de agregar restricciones en todos los lados de
UITableViewCell
un-Enlace de ejemplo 1
Enlace de ejemplo 2
fuente
UITableViewAutomaticDimension
ha cambiado su nombre aUITableView.automaticDimension
Si está utilizando una celda estática o una celda dinámica, simplemente agregue un poco de altura de fila a la vista de tabla en la tabla del inspector y desmarque el automático al lado derecho de la altura de fila, eso es todo, dejará de recibir esta advertencia.
fuente
Recibí esta advertencia hoy. Esto es lo que lo hizo desaparecer para mí (en el generador de interfaces)
1. Establezca el campo de altura de fila para la vista de tabla en algo diferente de 44 2 Establezca el campo de altura de fila para la celda tableView en algo diferente de 44
No tuve que hacer ningún cambio en el código
fuente
En mi caso, estaba construyendo la celda mediante programación y seguía recibiendo este error.
Estaba agregando las subvistas y restricciones en el método de
UITableViewCell
'sinit
así:Resolví el problema agregándolos a la celda en su
contentView
lugar:fuente
contentView
, no alUITableViewCell
directamente.Establezca el alto de fila estimado en cero y la advertencia desaparece:
fuente
Yo también experimenté esta advertencia al pasar a Xcode 6 GM. Solo recibí la advertencia cuando volví a girar el dispositivo a su posición original.
Estoy usando UITableViewCells personalizados. La vista de la tabla del guión gráfico se establece en mi tamaño personalizado (100.0 en mi caso). Si bien las celdas de la tabla se procesan correctamente como lo hicieron en versiones anteriores, no me gustó el mensaje de advertencia.
Además de las ideas anteriores, agregué esto
La pantalla se procesa ... responde a la rotación y no más mensajes de advertencia.
fuente
En xcode 6.0.1 había eliminado estas advertencias especificando la altura de la fila usando:
fuente
Si ha creado un TableViewCell personalizado para TableView, asegúrese de haber dado las restricciones inferior y superior a sus celdas, también podría recibir este mensaje si sus subvistas dentro de las celdas personalizadas están alineadas en el centro Y, lo que no revelaría ningún mensaje de error, pero causaría problemas con la altura de la fila de identificación para la vista de tabla a su vez, como en la Imagen que he adjuntado, aquí tenemos restricciones superiores e inferiores
Cuando crea una celda personalizada para tableView, debe tener una altura de fila específica o restricciones superiores e inferiores para las subvistas de la celda personalizada dentro de la celda (por ejemplo, etiqueta en la celda personalizada como en la imagen de abajo)
Pero si esto no funciona, puede intentar establecer el alto de fila para su celda en lugar de ser automático como en esta imagen
Pero asegúrese de que si desactiva esa marca automática, debe ajustar el tamaño de la fila para los cambios mediante programación que podrían haberse realizado automáticamente
fuente
En el guión gráfico, configure el
cell
Row height
campo con el mismo valor queRow height
entableView
(ambos con el mismo valor me funcionaron).Si agrega una
heightForRowAtIndexPath
función a su código, puede provocar un problema de rendimiento porque se llamará para cada celda, así que tenga cuidado.fuente
También puede ver este mensaje si sus únicas restricciones están configuradas para alinear todos los elementos verticalmente y no tiene / desea una altura especificada para la celda. Si establece una restricción superior / inferior en el elemento, la advertencia desaparecerá.
fuente
Tuve este problema cuando mis etiquetas y vistas en la tableViewCell personalizada estaban restringidas a la customCell, no a su Vista de contenido. Cuando borré las restricciones y las conecté a las celdas Vista de contenido, el problema se resolvió.
fuente
Recibí el mismo mensaje de error, asegúrese de que todas sus salidas sean válidas, como la vista de tabla y las restricciones de vista de tabla
fuente
Si está haciendo un cálculo dinámico de altura,
fuente
También tengo un problema similar para la celda de vista de tabla personalizada que tiene una altura de fila dinámica. La altura dinámica no se reflejó y recibió la misma advertencia en la consola. La solución es agregar subvistas a la celda en lugar de contentView. Por cierto, he creado subvistas programáticamente.
fuente
Tengo este problema en
TableViewCell
s donde las restricciones se establecen en la inicialización, pero donde los contenidos de la celda se cargan después, esto significa que el motor de distribución automática no puede determinar la altura. Las otras soluciones aquí no funcionan porque necesito que la altura de la celda seaUITableView.automaticDimension
.Acabo de agregar una restricción adicional a la celda:
fuente
Recibí esta advertencia hoy. Todo lo que hice fue agregar una línea adicional a mi código.
agregue esta línea de código dentro del
y el código final parece
este código aumentará la altura de la celda de la fila de la tabla a 200, la altura predeterminada es 44
fuente
Tengo el mismo error, debido a esta línea se mostró este error.
self.layer.backgroundColor = UIColor (blanco: 1, alfa: 0.2) como! CGColor
Solo cambio la línea de la siguiente manera para corregir el error
self.layer.backgroundColor = UIColor (blanco: 1, alfa: 0.2) .cgColor
fuente