iOS: UITableView dentro de UITableViewCell con altura de celda dinámica

Quiero implementar UITableView dentro de UITableViewCell con altura dinámica de celda de acuerdo con el tamaño de contenido dentro de UITableView . ¿Cómo puedo implementar esta sugerencia? Quiero layout algo así …

Código de trabajo:

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { let identifier = "OrderHistoryTVCell" let cell: OrderHistoryTVCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? OrderHistoryTVCell let tableInnerContentSize = cell.tableInner.contentSize.height let nn = cell.viewAfterTable.frame.height+tableInnerContentSize return nn } 

introduzca la descripción de la imagen aquí

use los siguientes:

 @IBOutlet weak var tableView: UITableView! //connect the table view //do following in viewDidLoad method tableView.estimatedRowHeight = 100 //Your estimated height tableView.rowHeight = UITableViewAutomaticDimension 

Configure también estas dos properties de UILable desde la sección del inspector de Atributos del guión gráfico:

  • líneas a 0
  • Salto de línea a wrap de palabras

o también puede establecer estas properties desde el código:

 self.lblxyz.numberOfLines = 0 self.lblxyz.lineBreakMode = .byWordWrapping 

Nota: agregue la restricción correctamente en la celda de vista de tabla.

Tienes que hacer algo como esto:

  1. En ui Master-Item # es el encabezado de su sección. Así que toma UILabel y agrégalo como un encabezado de sección.

  2. Su subelemento es la prtotype-cell cell que contiene una label.

Restricciones para la label dentro de la celda.

  • En su cell primero agregue UIView con restricciones de la siguiente manera:
    1. Parte superior, Parte inferior, Líder, Parte inferior a superView como 0 .
  • Ahora agregue la label y dé restricciones como sigue.
    1. Parte superior, inferior, líder, inferior a UIView como 8 .
    2. Da restricción de altura según tu requerimiento.
    3. Dar una relación de altura de = a >= .
    4. Establezca la línea de propiedad de la label en 0 desde el guión gráfico.

Implementa estas líneas en

 //MARK:- TableView public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat{ return 60 // return header height } public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { // return your section header ie master item label } public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat{ return 50; } public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{ return UITableViewAutomaticDimension } public func numberOfSections(in tableView: UITableView) -> Int{ // return number of section ie total count of master item. } public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ // returns number of cells in each section } public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ // return your custom cell here //eg: // cell.labelFood.text = your data } 

NOTA : no olvide unir delegate y dataSource de tableView.

use este código en viewDidLoad ()

 self.tableView.estimatedRowHeight = 350 self.tableView.rowHeight = UITableViewAutomaticDimension 

Use este delegado

 func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableViewAutomaticDimension } 
 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { self.tableView.estimatedRowHeight = 160 return UITableViewAutomaticDimension } 

También establezca estas dos properties de UILable.

  @IBOutlet weak var label: UILabel! 
  1. label.numberOfLines = 0