我在使用DoThis函数的scrollViewDidEndScrollingAnimation时间做了一些事情。 但有时,带有animate = YES的scrollToRowAtIndexPath不会滚动任何内容。
那么我怎么知道滚动是否能够在scrollToRowAtIndexPath调用之后强制执行替代函数DoThisWithNoScrollOccured调用?
答案 0 :(得分:4)
Joshua的答案非常接近,但是我遇到了滚动 的情况,即使您要滚动到的indexPath
列在indexPathsForVisibleRows
中
例如,如果您使用滚动位置UITableViewScrollPositionTop
滚动到indexPath,当indexPathsForVisibleRows
中列出indexPath时,滚动将仍然 - 如果您的{{ 1}}不是第一个可见的indexPath
,并且在indexPath
中列出的行之后有更多可显示的行。
在这种情况下,UITableView会尝试将indexPathsForVisibleRows
尽可能靠近最顶层的显示位置滚动。
我还没有尝试过,但如果您要滚动到的indexPath
上方有可显示的行,我希望UITableViewScrollPositionBottom
具有类似的效果,indexPath
您滚动到的位置不是indexPath
中的最后一个indexPath
。
答案 1 :(得分:3)
对于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
}
答案 2 :(得分:1)
您可以检查indexPathsForVisibleRows
,看看您尝试滚动到的RowAtIndexPath是否已经可见。如果它已经可见,则不会滚动。