Come posso ottenere il ridisegno delle celle una volta ruotato il dispositivo?iOS - Ridisegna TableViewCells con alte celle dinamiche a rotazione
Quando eseguo il test su iPhone, l'orientamento predefinito è verticale, quindi le mie celle dinamiche sono alte quanto devono essere quando il dispositivo è in orientamento verticale: ciò significa che quando ruoto in orizzontale, c'è un sacco di spazio vuoto nella cella. Quando provo su iPad, è l'opposto. Taglio parte del mio testo quando si ruota in posizione verticale, poiché l'impostazione predefinita è paesaggio. Ho storyboard separate per entrambi i dispositivi, ed entrambi i controller di vista sono impostati su "Orientamento: dedurre"
(ritratto) (Paesaggio)
Questo è ciò che sta accadendo su iPhone - l'etichetta di stretching ha un buio sfondo rosso in modo da poter vedere le dimensioni reali dell'etichetta. Tuttavia, l'altezza della cella non ricalcola e poiché le etichette in basso sono vincolate al fondo della cella, sono completamente in basso da sole. Se posso aggiungere un vincolo dall'etichetta di stretching (quella con lo sfondo) al fondo della cella, non fa altro che allungare l'etichetta in questo modo:
(Label è allungato)
cosa questo dice io sono proprio ora che non riesco a far sapere alla cellula quale sia l'orientamento e a ridisegnare una volta che si adatta alla situazione. Ecco il mio heightForRowAtIndexPath
codice che sta calcolando l'altezza della cella:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.opCell)
{
self.opCell = [self.container dequeueReusableCellWithIdentifier:@"OPCell"];
}
self.opCell.opName.text = [[self.data objectAtIndex:indexPath.row] valueForKey:@"name"];
[self.opCell layoutIfNeeded];
CGFloat height = [self.opCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height + 1;
}
Finora per farlo ruotare ho provato [self.container reloadData]
, in cui il contenitore è il mio TableView
con willRotateToInterfaceOrientation
e didRotateToInterfaceOrientation
inutilmente. Ho anche provato a metterlo in viewDidLoad, in modo da poterlo rilevare e caricare quando la vista è caricata in modalità orizzontale con l'altezza corretta, ma anche questo non ha funzionato. Per iPhone, indipendentemente da ciò che faccio, carica l'altezza per la visualizzazione verticale e non si aggiorna a rotazione.
ho trovato un paio di domande che ho pensato potrebbe aiutare, ma io non riesco a ottenere this answer lavorare per me, anche se sembra che la stessa domanda che ho, e this one sembra concentrarsi maggiormente sulla larghezza della cella di altezza e non sono sicuro che si applica allo stesso modo.
Here è anche un tutorial che, quando l'ho eseguito su iPhone, non ridimensiona anche TableViewCells a rotazione.
This tutorial sembrava avere una certa comprensione a cambiare altezze da tavolo, così ho aggiunto il codice begin/endUpdates
nel mio didRotateToInterfaceOrientation
, pensando che potrebbe causare un cambiamento, ma questo non ha funzionato pure.
Quindi, se qualcuno ha qualche suggerimento o conosce una soluzione, sarebbe molto apprezzato, dato che sto colpendo un muro di mattoni con questo!
Dovresti spostare le cose che non hanno nulla a che fare con il calcolo dell'altezza del metodo ... sarebbe un buon inizio. – nhgrif
Ho bisogno di tutto il codice nel mio metodo heightForRowAtIndexPath. Devo dichiarare la cella, dichiarare il titolo che voglio rendere dinamico, quindi dirgli di calcolare l'altezza con le ultime 2 righe. Le celle dinamiche sono più difficili di quanto debbano essere e questo funziona. –
Questo è un buon tutorial su come creare un tableViewCells dinamico. http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout – samir