Определить координаты UITableViewCell при прокрутке
Моя цель - включить/выключить UITableViewCells, когда они приближаются к границам UITableView и будут закрыты/обнаружены.
Подход, который я пытался, - получить координаты UITableViewCell во время события прокрутки. Проблема в том, что каждая ячейка, кажется, равна 0,0. Я попытался преобразовать координаты в родительскую таблицу и просмотреть, но они все равно выходят в 0,0.
В общем, если кто-нибудь знает способ получить координаты или лучший способ угасать UITableViewCells в зависимости от их позиции, я был бы очень признателен за любые советы, которые у вас могут быть.
Спасибо за ваше время,
Joel
Ответы
Ответ 1
Первый шаг заключается в использовании
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)
Ответ 2
Почему не наложение с частично прозрачным градиентом PNG в UIImageView, которое менее прозрачно сверху и снизу?
Посылка с помощью рисования ячейки в прокрутке таблицы приведет к большому результату.
Ответ 3
Вы можете позвонить
- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;
чтобы получить прямую любую ячейку. Это будет содержать его координаты в структуре начала в rect.
Ответ 4
Я подозреваю, что ячейки хранятся в подвидных элементах размера ячейки UITableView, поэтому вы видите рамку относительно этого представления.
У меня нет фактического ответа для вас, но я бы предложил проверить класс делегата UIScrollView: UIScrollViewDelegate. Он отвечает на – scrollViewDidScroll:
, и вы можете вручную выработать свое смещение от этого. UIScrollView является суперклассом UITableView.
Вы можете преобразовать точки (например, ваше происхождение) в другие координаты представления с использованием метода UIView - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
.