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
}
È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top