iPhone - Как я могу знать, что scrollToRowAtIndexPath прокрутит что-то - PullRequest
1 голос
/ 22 января 2011

У меня есть кое-что сделать во время scrollViewDidEndScrollingAnimation с помощью функции DoThis.Но иногда scrollToRowAtIndexPath с animate = YES ничего не прокручивает.

Так как же узнать, будет ли выполнена прокрутка, чтобы можно было вызвать альтернативный вызов функции DoThisWithNoScrollOccured после вызова scrollToRowAtIndexPath?

Ответы [ 3 ]

4 голосов
/ 05 декабря 2012

Ответ Джошуа довольно близок, но я сталкивался с ситуациями, в которых прокрутка будет , даже если indexPath, на который вы хотите перейти, указан в indexPathsForVisibleRows.

Например, если вы прокручиваете к indexPath с помощью позиции прокрутки UITableViewScrollPositionTop, прокрутка все еще происходит, когда indexPath указан в indexPathsForVisibleRows - если ваш indexPath не первый видимый indexPath и после перечисленных в indexPathsForVisibleRows.

есть более отображаемые строки

В этом сценарии UITableView пытается прокрутить indexPath как можно ближе к самой верхней позиции экрана.

Я не пробовал, но я ожидал бы, что UITableViewScrollPositionBottom будет иметь аналогичный эффект, если есть отображаемые строки выше indexPath, к которому вы будете прокручивать, и indexPath, к которому вы прокручиваете, это не последний видимый indexPath в indexPathsForVisibleRows.

3 голосов
/ 16 ноября 2014

В iOS7 ни один из этих подходов не работал для меня, возможно, из-за содержимого моего UITableView. indexPathsForVisibleRows вернул пути индекса для строк, с которыми невозможно было взаимодействовать, потому что они стояли за UINavigationBar. Вместо этого я сделал следующее:

CGRect rect = [tableView rectForRowAtIndexPath:indexPath];
if (rect.origin.y != self.tableView.contentOffset.y + self.tableView.contentInset.top) {
   // scrollToRowAtIndexPath will animate and callback scrollViewDidEndScrollingAnimation
} else {
   // scrollToRowAtIndexPath will have no effect
}             
1 голос
/ 22 января 2011

Вы можете проверить indexPathsForVisibleRows и посмотреть, видим ли уже тот RowAtIndexPath, на который вы пытаетесь прокрутить. Если он уже виден, прокрутки не будет.

...