Подтвердить что ты не робот

Определить координаты UITableViewCell при прокрутке

Моя цель - включить/выключить UITableViewCells, когда они приближаются к границам UITableView и будут закрыты/обнаружены.

Подход, который я пытался, - получить координаты UITableViewCell во время события прокрутки. Проблема в том, что каждая ячейка, кажется, равна 0,0. Я попытался преобразовать координаты в родительскую таблицу и просмотреть, но они все равно выходят в 0,0.

В общем, если кто-нибудь знает способ получить координаты или лучший способ угасать UITableViewCells в зависимости от их позиции, я был бы очень признателен за любые советы, которые у вас могут быть.

Спасибо за ваше время, Joel

4b9b3361

Ответ 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.