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