Ho una personalizzazione dinamica UITableViewCell
che sfrutta il layout automatico.Approccio preferito per modificare il contenuto di UITableViewCell in base alla larghezza della cella
Varia il contenuto del testo di un'etichetta, a seconda della larghezza della cella.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb";
return cell;
}
reloadData
è chiamato durante la transizione orientamento di aggiornare l'etichetta.
Mentre funziona, immagino ci sia un modo migliore per gestirlo che non implichi il sovraccarico del ricaricamento di tableView.
(Nessuno dei vincoli devono essere cambiate. L'etichetta è nello stesso posto, ma semplicemente mostra un contenuto diverso, quando non c'è più spazio per lui.)
Devo sottoclasse
UILabel
e modificare il testo in-didMoveToSuperview
?È possibile modificare il testo in
-layoutSubViews
? (Non causerebbe un altro passaggio di layout perché il testo è stato modificato?)
Grazie per eventuali risposte!
"che non comporta il sovraccarico di ricaricare la tableView" Penso che la prima cosa da fare è ripensare il motivo per cui si crede che ricaricare la visualizzazione della tabella è "in testa". È abbastanza efficiente, dal momento che solo i dati della cella della tabella visibile vengono effettivamente recuperati di recente e il modello dei dati dovrebbe essere completamente efficiente o sbagliato. – matt
Sembra eccessivo, Matt. Il layout automatico sta già accadendo, come risultato della rotazione automatica, e suppongo che possa essere gestito proprio all'interno del passaggio del layout che si sta già verificando. Non ne so abbastanza del layout automatico per sapere come la cella o l'etichetta dovrebbero gestirlo. –
Ma il problema che non cito è il sottile sfarfallio della ricarica che non si vedrebbe senza la ricarica. Sarebbe più bello se non avessi dovuto ricaricare la tabella, e si sarebbe semplicemente ruotato automaticamente e ridisegnato da solo (con contenuti diversi). Possibile? –