Первый шаг - использовать
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];
, который сообщит о CGRect ячейки в tableView. Однако это значение не изменяется при прокрутке tableView. Это позиция относительно первой строки таблицы (а не первой видимой строки). Чтобы получить положение ячейки на экране, вы должны преобразовать ее в систему координат суперпредставлений, используя
CGRect rect = [tableView convertRect:rectInTableView toView:[tableView superview]];
Итак, следующая строка делает все это
CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:[tableView superview]];
Swift 4
// Consider the indexPath at row 1, section 0.
let rectWithinTableView : CGRect = self.tableView.rectForRow(at: IndexPath(row: 1, section: 0))
let rectWithSuperViewCoordinates : CGRect = self.convert(rect: rectWithinTableView, to: self.tableView.superview)