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