Cómo configurar las células auto dimensionadas iOS8

Tengo un controller de vista con una vista de tabla. Ahora quiero configurar una celda de tamaño propio. La celda debe contener tres o más tags. Si tengo solo dos tags, la célula auto dimensionadora funciona perfectamente. Pero tan pronto como agrego la tercera label, el text en la segunda label ya no se envuelve. y debajo de la tercera label hay mucho espacio libre. Captura de pantalla http://stefangerard.comhttp://sofes.miximages.comselfSizing.png Estas son las restricciones de las tres tags.

  • primera label (Hello CustomCell)

primera restricción Etiqueta http://stefangerard.comhttp://sofes.miximages.comconstraint1.png

  • segunda label (mucha curiosidad …)

restricción segunda Etiqueta http://stefangerard.comhttp://sofes.miximages.comconstraint2.png

  • Tercera label (Preocupaciones más grande …)

constarint third Label http://stefangerard.comhttp://sofes.miximages.comconstraint3.png

En mi ViewController, simplemente configuré la celda y llamo a estas dos líneas en viewDidLoad () para que la celda calcule su altura por sí misma.

self.tableView.estimatedRowHeight = 50.0 self.tableView.rowHeight = UITableViewAutomaticDimension 

My ViewController se ve así:

 import UIKit class CustomViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() self.tableView.estimatedRowHeight = 50.0 self.tableView.rowHeight = UITableViewAutomaticDimension } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.tableView.reloadData() } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var someRandomText1 = "Far curiosity incommode now led smallness allowance. Favour bed assure son things yet. She consisted consulted elsewhere happiness disposing household any old the. Widow downs you new shade drift hopes small. So otherwise commanded sweetness we improving. Instantly by daughters resembled unwilling principle so middleton. Fail most room even gone her end like. Comparison dissimilar unpleasant six compliment two unpleasing any add. Ashamed my company thought wishing colonel it prevent he in. Pretended residence are something far engrossed old off." var someRandomText2 = "Concerns greatest margaret him absolute entrance nay. Door neat week do find past he. Be no surprise he honounetworking indulged. Unpacked endeavor six steepest had husbands her. Painted no or affixed it so civilly. Exposed neither pressed so cottage as proceed at offices. Nay they gone sir game four. Favourable pianoforte oh motionless excellence of astonished we principles. Warrant present garrets limited cordial in inquiry to. Supported me sweetness behaviour shameless excellent so arranging." var cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableViewCell cell.headlineLabel.text = "Hello CustomCell" cell.text1Label.text = someRandomText1 cell.text2Label.text = someRandomText2 return cell } } 

¿Alguien puede ayudarme con este problema?

¡Gracias!

EDITAR

Puede download el proyecto aquí: https://github.com/stefocdp/selfSizingCell

Lo arreglé agregando esta línea de código a la function cellForRowAtIndexPath

 cell.layoutIfNeeded() 

My ViewController se ve así ahora:

 import UIKit class CustomViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() self.tableView.estimatedRowHeight = 50 self.tableView.rowHeight = UITableViewAutomaticDimension } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.tableView.reloadData() } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var someRandomText1 = "Far curiosity incommode now led smallness allowance. Favour bed assure son things yet. She consisted consulted elsewhere happiness disposing household any old the. Widow downs you new shade drift hopes small. So otherwise commanded sweetness we improving. Instantly by daughters resembled unwilling principle so middleton. Fail most room even gone her end like. Comparison dissimilar unpleasant six compliment two unpleasing any add. Ashamed my company thought wishing colonel it prevent he in. Pretended residence are something far engrossed old off." var someRandomText2 = "Concerns greatest margaret him absolute entrance nay. Door neat week do find past he. Be no surprise he honounetworking indulged. Unpacked endeavor six steepest had husbands her. Painted no or affixed it so civilly. Exposed neither pressed so cottage as proceed at offices. Nay they gone sir game four. Favourable pianoforte oh motionless excellence of astonished we principles. Warrant present garrets limited cordial in inquiry to. Supported me sweetness behaviour shameless excellent so arranging." var cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableViewCell cell.headlineLabel.text = "Hello CustomCell" cell.text1Label.text = someRandomText1 cell.text2Label.text = someRandomText2 cell.layoutIfNeeded() return cell } } 

Creo que su problema proviene del estimatedRowHeight. Tienes que establecerlo más cerca de lo que va a ser en realidad.

En su caso, con las restricciones actuales, solo el espacio entre las tags marca 48. También tuve este problema cuando no ajustar el valor estimado de RowHeight a un número sensible haría que el tableview ya no calcule nada bueno.

Intente configurarlo en 110 (3 x 20 para cada label + 48 entre ellos).