防止UITableView在某个点下滚动

时间:2014-12-23 16:55:45

标签: ios objective-c uitableview swift

如何让UITableView允许在特定索引行上方滚动,但在低于某一点时阻止它?例如,如果我有第1行到第100行,其中在给定时间内只有5行出现在视图中,我想允许用户在第1-50行之间滚动,但是当第50行可见时阻止进一步向下滚动。 / p>

2 个答案:

答案 0 :(得分:3)

您可以使用contentInset的属性UITableView。只记得用负值设置它们,因为我们缩小了内容大小:

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兼容,但如果你真的需要用户不要在某一行下方看到,请使用委托方法。

答案 1 :(得分:0)

UITableView是UIScrollView的子类。这意味着您可以使用UIScrollViewDelegate中的所有方法。尝试在以下委托方法中添加scrollView.contentOffset逻辑:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;