Gdyby to zrobić w ostatnim czasie. Musisz użyć [tableView rectForRowAtIndexPath]
.
Jedną z rzeczy, która może cię złapać, jest to, że podczas przewijania UITableView musisz wziąć pod uwagę przesunięcie (tzn. Coś, co zgłasza swoją pozycję y, ponieważ 3000 pikseli oznacza oczywiście 3000 od góry UITableView - nie 3000 pikseli na ekranie).
Oprócz tego będzie on naturalnie pojawiał się na górze komórki, więc do obliczeń należy dodać połowę wysokości komórki.
Ten kod działa dobrze dla mnie:
CGRect frame = [tableView rectForRowAtIndexPath:indexPath];
CGPoint yOffset = self.tableView.contentOffset;
[self.popoverController presentPopoverFromRect:CGRectMake(frame.origin.x, (frame.origin.y + 45 - yOffset.y), frame.size.width, frame.size.height)
W moim przypadku każda komórka była 90 pikseli wysokości, stąd '+45' bit. Zastąp połowę swojej własnej wysokości komórki.
To świetne rozwiązanie! –
To było bardzo pomocne. Pocierałem niewłaściwy, łamałem głowę z wysokością [[tableView cellForRowAtIndexPath: indexPath] height] - Twoje rozwiązanie było tym, czego naprawdę potrzebuję. Wielkie dzięki! – Veeru