2015-11-24 8 views
5

Ho un UITableView con altezze di riga automatiche e un numero personalizzato UITableViewCell. All'interno dello UITableViewCell, aggiungo per la prima volta alcuni UIButton s con i vincoli di Autolayout programmatico. Sono posizionati perfettamente come voglio. Quindi, dopo 3 secondi (NSTimer), rimuovo tutti quelli UIButton s e aggiungo nuovamente un numero diverso. (Per esempio inizialmente ho 4 UIButtons, dopo 3 secondi, io rimuovere quelle 4 UIButton s e aggiungere 3 quelli diversiModifiche di Autoapprendimento programmatico all'interno di UITableViewCell aggiornate solo dopo il cambio di orientamento

Inizialmente:.

Initially dopo 3 secondi:

3 seconds later

Messaggio di rotazione:

enter image description here

Perché sta succedendo? Non vedo alcun avviso di Autolayout. Inoltre, dopo un cambio di orientamento, tutto è posizionato correttamente. Cos'è che richiede un cambiamento di orientamento? Come posso forzare manualmente (ricaricare la Tableview proprio per questo sembra troppo da fare)

PS:? Ho provato ad utilizzare setNeedsUpdateConstraints, layoutIfNeeded, layoutSubviews ma senza alcun risultato.

Ecco il codice UITableViewCell: http://pastebin.com/TcHUXgDU. (Aggiunto un pastebin per non inquinare questo spazio) Ma fondamentalmente, c'è un metodo configure: che ho nella mia sottoclasse tableview che chiamo nello cellForRowAtIndexPath del suo contenente UITableView. Questo metodo aggiunge quei vincoli. Inoltre, dopo l'attivazione del timer, viene richiamato lo stesso codice (in un'altra funzione) tranne per il fatto che il numero di elementi che aggiungo è diverso dal numero iniziale di elementi.

Questo è il mio layout UITableViewCell: (solo alto, in basso, da guida, sono stati aggiunti i vincoli finali al UIView "Outerview")

uitableviewcell layout

+0

puoi pubblicare qualche codice? e prima dell'orientamento posso vedere che l'altezza della cella è variabile, il che sta facendo schiacciare i pulsanti sul padding, mentre il cambiamento di orientamento lo rende ok cambiando l'altezza della cella. –

+0

Ho pubblicato del codice. Inoltre, prima dell'orientamento, l'altezza della cella è costante per tutte e 3 le celle. (a differenza di come dici tu) –

+0

Non risponde alla tua domanda, ma avrai un tempo molto più bello implementando automaticamente l'autolayout se usi una libreria come [Massoneria] (https://github.com/SnapKit/Masonry) – sjwarner

risposta

0

È necessario ricaricare l'UITableView, questo sarà re-caculate l'altezza della cella

+0

Sì, è come una panacea con altezze del layout di uitableviewcell, ma mi chiedevo se c'è un modo più economico per forzare gli aggiornamenti nel layout uitableviewcell. –

+0

- (void) reloadRowsAtIndexPaths: (NSArray * _Nullull) indexPaths withRowAnimation: (UITableViewRowAnimation) animazione. controlla il documento di UITableView – yanyabo111

+0

Terminato il ricaricamento del tableview dopo tutto –