Calcolare altezza della cella in base al numero di righe?
-
27-09-2019 - |
Domanda
Mi piacerebbe fare un'altezza UITableViewCell personalizzato utilizzando (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
.
Sto cercando di ottenere l'altezza del UITableViewCell
moltiplicando il numero di linee in textLabel
per l'altezza di ogni riga e quindi aggiungendo 10.0f
per il sottotitolo. Sto usando il seguente codice e ottenere exc_bad_access()
. Perché?
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return ([[[tableView cellForRowAtIndexPath:indexPath] textLabel] numberOfLines] * [[[[tableView cellForRowAtIndexPath:indexPath] textLabel] font] lineHeight]) + 10.0;
//return kRowHeightiPod; //A constant value for a sanity check
}
Soluzione
Prima di poter ottenere la cella, è necessario calcolare che di altezza. Hai appena fatto il calcolo è di altezza dipende ricevendo il cellulare. Hai creato una ricorsione infinita.
Si sta andando ad avere bisogno di trovare un altro modo per fare il calcolo, probabilmente esaminando i dati che si sta aggiungendo alla cella della tabella, invece di interrogare direttamente la cella di una tabella.
Si noti inoltre che numberOfLines
rappresenta il numero di righe un'etichetta di testo in grado di visualizzare, ma può visualizzare meno se non c'è abbastanza contenuti. In altre parole, anche se è solo mostrando una riga di testo, numberOfLines
restituirà due se questo è il numero massimo di righe l'etichetta di testo è in grado di visualizzare.
Quello che probabilmente desidera è quello di utilizzare uno dei aggiunte NSString UIKit per calcolare l'altezza del testo testo che si desidera visualizzare nella cella.
Altri suggerimenti
Non è possibile impostare il numero di righe sull'etichetta? A causa che sta per dare una risposta che è l'impostazione predefinita, non il numero di linee che corrispondono al testo si utilizza ...
Direi che la causa più probabile di un incidente è qualcosa a che fare con la textLabel. Prova impostazione NSZombieEnabled su YES nelle variabili di ambiente per l'eseguibile, e il log vi dirà che tipo di oggetto che viene chiamato dopo il rilascio ...