防止UITableView在某个点下滚动
如何让UITableView允许在特定索引行上方滚动,但在低于某一点时阻止它? 例如,如果我有行1到100,其中在给定时间只有5个出现在视图中,我想允许用户在行1-50之间滚动,但是当行50可见时阻止进一步向下滚动。
您可以使用UITableView
的属性contentInset
。 只记得用负值设置它们,因为我们缩小了内容大小:
CGFloat insetTop = topAllowedRow * c_CELL_HEIGHT * -1; CGFloat insetBottom = bottomAllowedRow * c_CELL_HEIGHT * -1; [self.tableView setContentInset:UIEdgeInsetsMake(insetTop, 0, insetBottom, 0)];
另一个解决方案是实现UIScrollViewDelegate
方法scrollViewDidScroll:
当scrollView.contentOffset
太大时,将其设置回用户可以滚动到的最大值:
- (void)scrollViewDidScroll:(UIScrollView*)scrollView { CGPoint scrollViewOffset = scrollView.contentOffset; if (scrollViewOffset.x > MAX_VALUE) { scrollViewOffset.x = MAX_VALUE; } [scrollView setContentOffset:scrollViewOffset]; }
第一种解决方案既有优点也有缺点,因为UIScrollView
将管理弹跳(就像拉动刷新一样)。 它更自然且与HIG兼容,但如果您真的需要用户不要在某一行下面看到,请使用委托方法。
UITableView是UIScrollView的子类。 这意味着您可以使用UIScrollViewDelegate
所有方法。 尝试在以下委托方法中添加scrollView.contentOffset
逻辑:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;