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

StackOverflow https://stackoverflow.com/questions/687793

  •  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 метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top