我正在努力实现的是" snap to cell"效果在UITableView
。
我的UITableView
有3个大小相等的单元格,但由于某种原因,UITableView
始终会捕捉到单元格0或单元格1,并且不会捕捉到第三个单元格。无论你多么努力地滑动,它的误差也大约低了50分。我使用最明显的代码来创建效果,因此我无法理解它为什么不起作用。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSIndexPath *pathForTargetTopCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), targetContentOffset->y)];
DLog(@"indexPathForRow %d", pathForTargetTopCell.row);
targetContentOffset->y = [self.tableView rectForRowAtIndexPath:pathForTargetTopCell].origin.y;
}
关于可能出现什么问题的任何想法?
编辑: 我怀疑这与顶部的状态栏和导航栏有关,因为它正好偏离64点。仍然没有解释为什么它不能识别最后一个细胞..
答案 0 :(得分:3)
对于状态栏偏移量,请在VC的viewDidLoad
:
if([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)])
[self setAutomaticallyAdjustsScrollViewInsets:NO];
修改强>
只是为了进行测试,您是否可以添加4个相同大小的细胞并尝试捕捉到第3和第4个细胞?
修改您的scrollViewWillEndDragging
实施,如下所示:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))];
[self.tableView scrollToRowAtIndexPath:pathForCenterCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}