Пришлось сделать это недавно. Вам нужно использовать [tableView rectForRowAtIndexPath]
.
Однако одна из вещей, которые могут вас поймать, заключается в том, что при прокрутке UITableView необходимо учитывать смещение (то есть что-то, сообщающее о своей позиции y в виде 3000 пикселей, конечно, означает 3000 с вершины UITableView - не 3000 пикселей на экране).
В дополнение к этому, он естественным образом появится в верхней части ячейки, поэтому вам нужно добавить половину высоты ячейки к вычислениям.
Этот код хорошо сработал для меня:
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)
В моем случае каждая ячейка имела высоту 90 пикселей, следовательно, бит «+45». Замените половину вашей собственной высоты клетки.