iPhone - 我怎么知道scrollToRowAtIndexPath是否会滚动某些内容

时间:2011-01-22 02:40:20

标签: iphone uitableview scroll return

我在使用DoThis函数的scrollViewDidEndScrollingAnimation时间做了一些事情。 但有时,带有animate = YES的scrollToRowAtIndexPath不会滚动任何内容。

那么我怎么知道滚动是否能够在scrollToRowAtIndexPath调用之后强制执行替代函数DoThisWithNoScrollOccured调用?

3 个答案:

答案 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是否已经可见。如果它已经可见,则不会滚动。