objective-c - ambiguedad - genitales ambiguos ecografia
iOS8: las restricciones sugieren ambiguamente una altura de cero (17)
Al forzar una altura de retorno y una altura estimada, la advertencia desapareció en mi caso.
- (CGFloat)tableView:(UITableView *)tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44;
}
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44;
}
Otra solución donde no necesita las dos anulaciones es simplemente usar self.tableView.rowHeight = 44;
en su método loadView
o init.
¿Alguien tiene alguna idea de cómo depurar esto?
Advertencia una sola vez: se detectó un caso donde las restricciones sugieren ambiguamente una altura de cero para la vista de contenido de una celda de tabla. Estamos considerando el colapso involuntario y el uso de altura estándar en su lugar.
Las filas tienen una altura fija según lo establecido por
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 34.0;
}
Y todas las constraints
parecen ser felices ...
Aquí hay dos cosas importantes que están sucediendo, creo.
1) Es muy fácil hacer las restricciones incorrectas si estás presionando ctrl +. Por lo tanto, verifique que lo haya hecho correctamente. Es mejor utilizar la bandeja en el lado izquierdo de la pantalla para dibujar estas restricciones.
2) En lugar de especificar la estimación de RowHeight en ViewDidLoad o en otro lugar, use el método de delegado
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {}
Esto solucionó el problema de inmediato para mí.
En Swift, forzar una altura de retorno solucionó mi problema:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if(indexPath.row == 0){
return CGFloat(131.0)
}else if(indexPath.row == 8){
return CGFloat(97.0)
}else{
return CGFloat(44.0)
}
}
En mi caso, es porque estoy diseñando la celda con xib, y me olvido de agregar ese archivo xib al objetivo.
Después de agregar ese archivo xib al objetivo, el problema se ha ido
Estaba usando un mapView dentro de uitableviewcell. Cambié la altura de la vista del mapa a 1/3 del tamaño de la pantalla del dispositivo. Tengo el mismo error. Solucioné el error agregando restricciones faltantes a la vista de contenido de uitableviewcell.
1) Borre las restricciones de contentView.
2) Configure Restablecer a las constantes sugeridas a contentView.
3) Agregue las restricciones faltantes - si hay alguna
4) Nos aseguramos de que la vista de contenido tenga todas las restricciones requeridas.
Las restricciones pueden ser alentadoras para el diseño, pero no para la altura de fila automática. Un diseño feliz significaría que el contenido se puede diseñar sin ambigüedad. Eso satisfaría los controles en Interface Builder.
Un diseño feliz para la altura de fila automática significa que, además de lo anterior, también está incluyendo restricciones en la parte inferior de la celda.
Más aquí: detectó un caso donde las restricciones sugieren ambiguamente una altura de cero
Lo que también se puede hacer es agregar restricciones verticales desde la parte superior e inferior de la vista de contenido. Esto alegrará el autolayout (porque ahora sabe cómo calcular la altura de la celda).
No pude eliminar la advertencia, pero para hacer que las restricciones funcionen, configuré la nueva propiedad de vista de tabla, iOS8, estimatedRowHeight
a la altura fija, y heightForRowAtIndexPath
implementación de heightForRowAtIndexPath
.
Para una solución estándar de pantano, sin restricciones, sin estimar alturas, o sobre la ingeniería del problema. Creé un proyecto predeterminado, conecté la vista de tabla pero olvidé poner el delegado de altura en el controlador de vista . Para hacer que esta advertencia desaparezca, necesitas esto.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 44;
}
En el controlador de vista de tu tabla.
Parece que hay un error en XCode 6.1 que causa este problema si se usa el diseño automático y no se especifica un valor para el alto de fila para cada celda de vista de tabla, sino que se deja el valor "predeterminado". Simplemente marcando la casilla "Personalizar" al lado de la Altura de fila, para cada celda, hace que la advertencia desaparezca.
Puede usar AutoLayout para calcular la altura correcta para usted. Aquí hay una buena publicación sobre Dynamic Cell Height en iOS 8: http://natashatherobot.com/ios-8-self-sizing-table-view-cells-with-dynamic-type/
Sí, obtiene todas las restricciones "felices" incluso en el caso de que solo tenga restricciones horizontales para los elementos en la celda de vista de tabla. Tuve el mismo problema. Necesita agregar también restricciones verticales. Al hacerlo, esa advertencia desaparecerá.
Si bien las respuestas en esta página sobre la adición de restricciones de altura o el retorno manual de rowHeights como 44 en heightForRowAtIndexPath hacen que la advertencia desaparezca, son superfluas porque se trata de un error en Xcode visible al menos en la Versión 6.3.2 (6D2105).
Si establece un punto de interrupción en viewDidLoad, verá que self.tableView.rowHeight = -1 (UITableViewAutomaticDimension) incluso si especifica una altura de fila de 44 en el guión gráfico. Esto se debe a que Apple asume incorrectamente que desea alturas de fila dinámicas si deja la altura de la fila en 44, porque no proporcionaron una marca para que usted especifique su preferencia.
Aquí hay algunas soluciones posibles y sus resultados:
Establezca la altura de la fila en 43 o 45 en el guión gráfico (funciona).
Devuelve manualmente una altura de 44 en heightForRowAtIndexPath (funciona).
Agregue restricciones de altura entre los elementos de UITableViewCell y su contentView (funciona).
Desafortunadamente, estas soluciones requieren que cambie su diseño, agregue restricciones innecesarias o agregue código innecesario para evitar un error. Intenté (lo que pensé que era) la solución más simple:
- Establezca la altura de cada UITableViewCell en 44 (Personalizado) en el guión gráfico (falla).
Realmente quería una solución de storyboard pura para esto, así que finalmente probé:
- Agregue un atributo de tiempo de ejecución definido por el usuario a UITableView en el guión gráfico, y nombre a UITableView con una nota sobre cómo se está configurando rowHeight para que los futuros desarrolladores puedan encontrarlo: (funciona):

Estos errores son muy comunes en el desarrollo de iOS y obligan a los desarrolladores a pasar demasiado tiempo sopesando las ramificaciones de cómo sus soluciones afectarán el mantenimiento a largo plazo.
Dado que encontrar una solución conceptualmente correcta que sea fácil de mantener y no parezca ofuscada es tan elusivo, y suponiendo que Apple arreglará el error y que 44 será la altura de fila predeterminada para el futuro previsible, entonces la restricción o definición del usuario las soluciones de atributos de tiempo de ejecución son probablemente las más sostenibles.
Si está utilizando restricciones de autoLayout y UITableViewAutomaticDimension, este error no es un problema erróneo que se descarta al anular su altura en el código. Significa que determinar la altura de la celda automáticamente no funciona porque no tiene las restricciones verticales adecuadas necesarias.
Si eres como yo y recibías este error y necesitabas ayuda para identificar qué celda arrojaba el error, puedes agregar la siguiente línea justo antes de que regrese tu método ''heightforRowAtIndexPath''.
NSLog(@"Section %ld Row %ld", (long)[indexPath section], (long)[indexPath row]);
Esto imprimirá una larga lista de secciones y filas, pero el error aparecerá inmediatamente después de la celda particular que está causando el error, y usted puede identificar rápidamente qué celda está causando el problema y corregir sus restricciones en consecuencia. Esto es particularmente útil para células estáticas. Anular la altura con un número ingresado manualmente funcionará si no está utilizando autoLayout y alturas de celda automáticas, sino que esencialmente desactivará estas características, que es una solución muy pobre si se trata de algo que está tratando de utilizar.
Si no usaba previamente el método ''heightForRowAtIndexPath'' pero desea depurar este error sin deshacer la configuración de UITableViewAutomaticDimension, simplemente agregue esto a su código:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Section %ld Row %ld", (long)[indexPath section], (long)[indexPath row]);
return UITableViewAutomaticDimension;
}
Si recibes esa advertencia, es más probable porque estás usando el diseño automático y tus celdas no tienen restricciones dentro de ellas.
Debe dejar de usar el diseño automático o implementar restricciones que definan inequívocamente la altura de las celdas.
Puede desactivar el diseño automático en el generador de interfaz desactivando la opción "Usar ajuste automático" en el inspector de archivos a la derecha.
Si elige usar el diseño automático y la altura de sus celdas es fija, implementar las restricciones apropiadas debería ser fácil. Simplemente agregue restricciones de altura para las subvistas de la vista de contenido de la celda e implemente restricciones de espacio vertical entre las subvistas, y entre las subvistas y la vista de contenido. Por ejemplo, si su celda tiene una etiqueta, esto funcionaría:
Restricciones verticales
- Restricción de espacio vertical entre la parte superior de la vista de contenido y la parte superior de la etiqueta
- Restricción de altura fija de la etiqueta
- Restricción de espacio vertical entre la parte inferior de la etiqueta y la parte inferior de la vista de contenido
Restricciones horizontales
- Restricción de espacio horizontal entre el borde anterior de la vista de contenido y el borde anterior de la etiqueta
- Restricción de ancho fijo de la etiqueta
- Restricción de espacio horizontal entre el borde posterior de la etiqueta y el borde posterior de la vista de contenido
También he visto este error cuando uso storyboards universales o xibs. Si no especifica las restricciones adecuadas para la clase de cualquier tamaño Any X, he visto aparecer este error.
Apple parece haber arreglado esto para iOS9. El error solo ocurrió en 8.4 para mí.
Utilicé Row Height 43 (o <> 44) en el inspector de tamaño de la Vista de tabla y el error desapareció. Usando 44 obtengo el error. Xcode versión 6.0.1.
- Esta respuesta fue eliminada por un moderador, por favor no, soluciona el problema. Esto SOLUCIONA el problema para mí y puede hacerlo también para otros. Entonces, ¿podrías ser tan amable de no borrarlo de nuevo?