2009-05-23 7 views
23

Su un iPhone, come si calcola la larghezza della vista del contenuto di una cella di visualizzazione tabella quando viene visualizzata una determinata vista accessoria (indicatore di divulgazione, ecc.)?Contenuto di UITableViewCellVisualizzazione della larghezza con un determinato tipo di accessorio

Ho bisogno di questo per calcolare l'altezza della cella corretta per le celle che contengono testo a lunghezza variabile. Ma quando al delegato della vista tabella viene richiesta l'altezza di una cella, in realtà non ha l'istanza di cella effettiva, quindi non può semplicemente interrogare i limiti della vista del contenuto direttamente.

Posso facilmente codificare un margine di 20 pixel a destra che sembra accurato per una tabella di stile semplice con orientamento verticale con un indicatore di divulgazione, ma preferirei farlo nel modo giusto in modo che mantenga funziona se Apple decide di modificare il margine.

(Questo è legato alla this question.)

risposta

2

Personalmente, vorrei solo codificare i valori in modo semplice, più semplice e le cose si interrompono in modo prevedibile.

Ma se dovessi farlo a livello di codice, creerei un UITableViewCell, configurerò le proprietà di modifica/le viste accessorie che è necessario misurare e poi gli chiederò quanto è grande il suo contentView.

Ovviamente molto probabilmente lo memorizzerò nella cache - facendo allocazioni quando chiedi a UITableView ti chiedo informazioni sull'altezza mi sembra come se fosse lento (controlla prima con un profiler però, come sempre).

+0

Sì, l'ho terminato con hardcoding (sono 20 pixel). Penso di aver provato a creare una cella fittizia come hai descritto quando stavo tentando di farlo e, se ricordo correttamente, non ha funzionato. Penso che il layout venga impostato solo quando una cella viene effettivamente visualizzata in una vista tabella. –

+0

Oh bene! Sono felice di sentire che hai trovato una soluzione. –

0

avrei una sottoclasse di UITableViewCell che contiene tutti i suoi elementi secondari. È possibile unire la cornice di determinati elementi quando la cella entra ed esiste la modalità di modifica. Ne è un buon esempio nella Guida alla programmazione di Table View di Apple nella sezione sulla creazione di una cella di visualizzazione tabella personalizzata.

0

Credo che la proprietà contentView di UITableViewCell sia la vista che contiene le etichette ecc., Quindi la larghezza di tale deve essere la dimensione disponibile da utilizzare.

+0

Il problema è che il delegato della vista tabella ha bisogno di conoscere l'altezza delle celle che non sono visibili e quindi non ha un'istanza di cella effettiva da cui ottenere contentView. Suppongo di poter ottenere _a_ visible content del contenuto di una cella e assumere che tutte le altre celle abbiano la stessa larghezza di contentView. –

+0

Si potrebbe provare semplicemente a rimuovere il metodo di altezza dal delegato, quindi impostare l'altezza quando si imposta la cella, utilizzando il metodo in UITableView –

+0

@Ed, che non funzionerà perché il delegato della vista tabella deve dire alla tabella la vista l'altezza di tutte le celle ancor prima che siano impostate in modo che la vista di scorrimento abbia le dimensioni corrette. –

Problemi correlati