Agregar una UITableView como una subvista de UITableViewCell utilizando AutoLayout

De hecho, tengo un problema con el layout automático. ¿Cómo puedo solucionar el problema? No entiendo qué es y cómo solucionarlo.

Descripción

Estoy tratando de resolver múltiples problemas:

  • Tener un UITableView # 1 con dos subclasss de UITableViewCell: HeaderCell y ListSongsCell.
  • Tener un UITableView # 1 con una altura de celda dinámica.
  • Tener un UITableView # 2 como una subvista de ListSongsCell.
  • Tener un UITableView n. ° 2 con una altura dinámica (según la cantidad de fila). El tipo de celda para UITableView # 2 es simplemente básico (altura de 44px).

Básicamente, estoy tratando de hacer una creación de tableview aquí.

Aquí hay una image de lo que estoy esperando:

http://imageshack.us/a/img703/9374/i7wn.png

En realidad, puedo hacer que UITableView # 1 tenga una altura de celda dinámica utilizando HeaderCell. Todas las restricciones de HeaderCell se definen en el guión gráfico, básicamente es solo un UIImageView.

Problema

Cuando quiero insert ListSongsCell en UITableView # 1 obtuve el siguiente logging:

Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<_UIScrollViewAutomaticContentSizeConstraint:0x8a8e820 UITableView:0x9275c00.contentHeight{id: 199} == -150.000000>" ) Will attempt to recover by breaking constraint <_UIScrollViewAutomaticContentSizeConstraint:0x8a8e820 UITableView:0x9275c00.contentHeight{id: 199} == -150.000000> Break on objc_exception_throw to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

Básicamente, sé que algo está mal con las restricciones en el guión gráfico, pero realmente no entiendo qué y por qué. En mi mente el flujo es así:

  1. Tratando de get la altura ListSongsCell
  2. Tratando de get la altura ContentView de ListSongsCell
  3. Tratando de get la altura UITableView # 2

¿Cuál es el problema aquí? ¿Cómo puedo resolver estos errores usando restricciones en el guión gráfico? ¿Entiendes lo que sucede exactamente?

¿Por qué estoy tratando de resolver eso?

Sé que puedo hacerlo fácilmente de otras maneras como:

  • Insertar varias celdas en lugar de insert una celda que contenga una vista de tabla
  • Solo tener un button que suelta una vista de tabla
  • Deshabilita la restricción y se basa en el marco (antiguo).

Pero tengo mucha curiosidad acerca de este problema, estoy seguro de que puedo tener un resultado final sin problemas con el funcionamiento de tabla anidada .

Fuentes

Aquí están las fonts que solía ayudarme a lograr este problema.

  • Uso de layout automático en UITableView para layouts de celdas dinámicas y alturas de filas variables
  • iosstuff.wordpress.com/2011/06/29/adding-a-uitableview-inside-a-uitableviewcell/

Proyecto de muestra

Echa un vistazo a este proyecto de ejemplo en GitHub que reproduce el problema: https://github.com/hefgi/TableViewInTableViewCell

No dude en plantear cualquier pregunta o problema que encuentre (puede abrir problemas en GitHub / commits o publicar comentarios aquí).