UITableView对齐单元格

时间:2014-06-10 09:28:55

标签: ios objective-c uitableview

我正在努力实现的是" 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点。仍然没有解释为什么它不能识别最后一个细胞..

1 个答案:

答案 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];
}