Sto riscontrando alcuni problemi nell'implementazione di altezze di riga dinamiche in un UITableView - ma non sono le celle con cui sto avendo un problema, è l'UILabel all'interno della cella.UILabel in UITableViewCell con altezza dinamica
La cella contiene solo un UILabel per visualizzare il testo. My tableView: heightForRowAtIndexPath: ridimensiona correttamente ogni cella calcolando l'altezza dell'etichetta che sarà contenuta in essa utilizzando sizeWithFont: method di NSString.
Ho una sottoclasse di UITableViewCell che contiene semplicemente la proprietà UILabel che è collegata nello storyboard. Nello storyboard ho impostato le sue linee su 0, quindi userà tutte le linee di cui ha bisogno, e ho impostato la sua riga Break su Word Wrap.
ecco come lo sono la creazione di cellule:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];
cell.myLabel.text = [object cellText];
[cell.myLabel sizeToFit];
return cell;
}
Quando costruisco questo, ho la mia vista tabella con la cellula del tutto dimensionato alla giusta altezza per il loro contenuto, ma le etichette sono tutti 1 linea che scorre appena fuori dal lato delle celle. Tuttavia, se faccio scorrere il tavolo in modo che cella lasci lo schermo, quindi scorri verso di essi, la loro etichetta verrà ridimensionata correttamente e la cella avrà l'aspetto che mi aspettavo inizialmente.
Ho anche provato a calcolare il frame delle etichette con lo stesso metodo con cui sto calcolando l'altezza della riga, e ottengo lo stesso comportamento: non si disegna correttamente finché non si scorre sullo schermo e si riaccende.
Ho trovato due modi per ovviare a questo problema e nessuna soluzione accettabile.
Primo, se in viewDidAppear: chiamo reloadData sulla mia tableview, le celle e le etichette si disegnano correttamente la prima volta. Ciò non funzionerà per la mia situazione, perché aggiungerò e rimuoverò le celle in questa tabella e non desidero chiamare reloadData ogni volta che viene aggiunta una cella.
La seconda soluzione mi sembra molto strana: se lascio le impostazioni del carattere al Carattere di sistema predefinito 17 su UILabel, le celle si disegnano correttamente. Non appena cambio la dimensione del font, ritorna al suo comportamento di non disegnare correttamente un'etichetta finché non esce dallo schermo e ritorna, o fa chiamare reloadData sul TableView.
Apprezzerei qualsiasi aiuto con questo.
Questo post risponde correttamente il problema: http://stackoverflow.com/questions/8903369/dynamic- UITableViewCell-altezza. Può essere un po 'complicato se non hai mai creato celle dimensionate dinamicamente, ma non è troppo difficile. – macandyp
Non capisco come il codice in quella risposta stia facendo qualcosa di diverso da quello che sto facendo. I AM imposta il frame della mia etichetta in cellForRowAtIndexPath, ma non lo applica fino alla prossima volta che viene ridisegnato. O mi sta sfuggendo qualcosa? – alivingston
Stai implementando heightForRowAtIndexPath? – macandyp