ページング距離を設定したい水平の UITableView があります。このアプローチを試みたのですが、
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
_tableView.decelerationRate = UIScrollViewDecelerationRateFast;
CGFloat pageSize = 320.f / 3.f;
CGPoint contentOffset = _tableView.contentOffset;
contentOffset.y = roundf(contentOffset.y / pageSize) * pageSize;
[_tableView setContentOffset:contentOffset animated:YES];
}
これは、ゆっくりスクロールして手放すと機能しますが、速くスクロールすると、多くのポップが発生します。しばらく悩んだ末、別の方法を試してみようと思います...
tableView でページングを有効にしてから、テーブルの幅を目的のページング サイズ (画面の幅の 3 分の 1) に設定するだけです。clipsToBounds = NO も設定します。このアプローチを使用すると、スクロールは期待どおりに機能しますが、小さなテーブル幅の外側のセルは描画されません。私が望むのは、UITableView のフレームの外にあるにもかかわらず、現在のセルの左右のセルを強制的に描画することです。cellForRowAtIndexPath get がより深いレベルから呼び出されることは知っていますが、選択したセルに対して自分でトリガーできる方法はありますか?
使ってみましたが、
[[_tableView cellForRowAtIndexPath:indexPath] setNeedsDisplay];
しかし、それは何もしませんgggggg!