2016-06-11 38 views
5

Ho una vista tabella con un mucchio di celle al suo interno. Voglio ottenere il frame di una cella, non nello spazio delle coordinate della sua superview, ma nello spazio delle coordinate della vista tabella.Come posso ottenere il frame di una cella di visualizzazione tabella nello spazio delle coordinate della vista tabella?

Un quadro sarebbe probabilmente meglio spiegare questo

enter image description here

Vedere il rettangolo rosso? Questa è la cornice della cella della tabella. E il rettangolo blu è la cornice della vista tabella. Voglio ottenere il rettangolo rosso relativo al rettangolo blu.

Ho provato a utilizzare la proprietà frame di UITableViewCell. Ma questo non funziona perché restituisce (0, 0, 320, 44). Il valore Y non dovrebbe essere zero perché ovviamente la cella non si trova nella parte superiore dello schermo.

Secondo la gerarchia della vista, questo è il comportamento previsto, perché il superview di una cella della tabella è a quanto pare questo UITableViewWrapperView, non la vista tabella:

enter image description here

mentre la vista tabella è questo:

enter image description here

Quindi non v'è un metodo/proprietà che può farmi un CGRect che rappresenta la cornice della vista tabella cella nello spazio delle coordinate della vista tabella?

Penso che ci sia una funzione in grado di convertire uno CGRect in uno spazio di coordinate in un altro. Ma ho dimenticato il suo nome e come usarlo. Non so se sia utile in questa situazione.

risposta

12

Si prega di utilizzare il codice

let rectOfCell= tableView.rectForRowAtIndexPath(indexPath) 
let rectOfCellInSuperview = tableView.convertRect(rectOfCell, toView: tableView.superview) 
+0

Qual è 'rectOfCellInTableView'? Intendevi 'rectOfCell'? – Sweeper

+0

Questo non funziona per me. Il metodo 'convertRect' non sembra prendere in considerazione l'altezza delle intestazioni di sezione. Il rect è un po 'più alto della cella della tabella. cioè ha un offset di -y. – Sweeper

+0

Quindi puoi provare a ottenere il rect per la sezione e quindi aggiungere y + (heightOfCell) (indexPath.row) della cella per ottenere la posizione della cella y. –