Eliminando subviews de un UITableViewCell con AutoLayout

Tengo una UITableView con una UITableViewCell personalizada. Ciertas subvistas en la celda se muestran / eliminan según las properties del object. Estoy usando layout automático y una xib. Aquí está el código relevante:

 if (![some condition]) { [self.descriptionLabel setText:descText]; } else { [self.descriptionLabel removeFromSuperview]; } 

Este es un diagtwig aproximado de la celda.

 ----------------------------- topLabel descriptionLabel bottomLabel ----------------------------- 

La única label que se puede eliminar es la label de descripción. Tengo una restricción de bottomLabel a descriptionLabel y otra de bottomLabel a topLabel con una prioridad más baja. Cuando se elimina la descriptionLabel , la bottomLabel inferior asume correctamente la restricción de prioridad inferior.

El problema surge en lo que supongo que es la reutilización de células, cuando me desploop hacia arriba / hacia abajo y una celda con la descriptionLabel se ha eliminado, se reutiliza, no se vuelve a agregar.

Suplentes que he probado:

  • Ocultando la descriptionLabel bottomLabel vs eliminarla, sin embargo, de esta manera mantiene su marco y, por lo tanto, la parte bottomLabel no se mueve hacia arriba.

¿Tendré que volver a inicializar la label y agregarla a la vista? ¿O hay una mejor manera de manejar este caso de uso?

Cuando oculte la descriptionLabel , debe llamar layoutIfNeeded método layoutIfNeeded después de cambiar las restricciones. Al cambiar las restricciones, debe cambiar sus prioridades. bottomLabel to topLabel La prioridad de la restricción topLabel debe ser high and bottomLabel a descriptionLabel prioridad de la restricción bottomLabel debe ser baja. Esto es mejor que quitar y volver a agregar la label.