2011-01-22 5 views
1

DoThis関数でscrollViewDidEndScrollingAnimation時間に行うべきことがいくつかあります。 ただし、animate = YESのscrollToRowAtIndexPathは何もスクロールしません。iPhone - scrollToRowAtIndexPathが何かをスクロールするかどうかを知る方法を教えてください。

したがって、scrollToRowAtIndexPath呼び出しの後にDoThisWithNoScrollOccuredという別の関数を強制的に呼び出すことができるようにスクロールが行われるかどうかを知るにはどうすればよいですか?

答えて

1

indexPathsForVisibleRowsを確認し、スクロールしようとしているRowAtIndexPathがすでに表示されているかどうかを確認できます。すでに表示されている場合は、スクロールしません。 indexPathあなたがindexPathsForVisibleRowsにリストされているためにスクロールしたい場合でも、

+2

これは、 'UITableViewScrollPosition'の値によっては必ずしも真実ではありません。 – NachoSoto

4

ジョシュアの答えはかなり近いですが、私はここでが発生するスクロールの状況に遭遇しました。あなたのindexPathが最初に表示さindexPathではなく、後に多くの表示可能な行がある場合 - 例えば

あなたは、スクロール、スクロール位置UITableViewScrollPositionTopを使用してindexPathにスクロールされている場合、indexPathはindexPathsForVisibleRowsにリストアップされている場合はまだ発生しますindexPathsForVisibleRowsに記載されているもの。

このシナリオでは、UITableViewは、indexPathを可能な限り一番上の表示位置にスクロールしようとします。

私はそれを試していないが、私はUITableViewScrollPositionBottomindexPath上記表示可能な行がある場合は、までスクロールされます、そしてindexPathあなたがスクロールしている同様の効果を持つことが期待されるが、最後の見えindexPathではありませんindexPathsForVisibleRowsにあります。

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 
}    
+0

はい、はい、はい - これは私が探していたものです。どうもありがとう !!! – KoCMoHaBTa

関連する問題