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.
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.