UITableView - 防止过度滚动而不禁用反弹

时间:2015-10-06 19:55:24

标签: ios objective-c

是否有任何方法可以阻止将tableview拖到顶部,同时仍允许它反弹?

我有一个桌面视图,我可以向上拖动以覆盖全屏幕。将其向下拖动时,它有时仍处于滚动模式,因此不会将整个容器视图向下拖动,而是允许tableview滚动到顶部之外。

如果我禁用弹跳,这会修复它,但我想以某种方式保持反弹但禁用在该状态下捕获它并继续拖动的能力。

类似的东西:

if (isBouncing){
    _tableview.enabled = NO;
}else{
    _tableview.enabled = YES;
}

我也试过下面的代码,但它基本上和[_tableView setBounces:NO]

做同样的事情
if (scrollView.contentOffset.y < 0) {
    [scrollView setContentOffset:CGPointMake(0, 0)];
}

3 个答案:

答案 0 :(得分:0)

我尝试将其添加到scrollViewDidScroll,并且在拖动时阻止了滚动,但允许通过减速(反弹)滚动滚动:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if (scrollView.contentOffset.y <= 0.0) {
        scrollView.scrollEnabled = false
        scrollView.scrollEnabled = true
    }
}

答案 1 :(得分:0)

试试这个:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint p = scrollView.contentOffset;
    if(scrollView.contentOffset.y<0)
    {   p.y=0;
        scrollView.contentOffset = p;
    }
}

答案 2 :(得分:-1)

我认为这个答案可以帮助你https://stackoverflow.com/a/28570023/4755417

func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: UnsafePointer<CGPoint>) {

     var pageWidth = Float(200 + 30)
     var currentOffset = Float(scrollView.contentOffset.x)
     var targetOffset = Float(targetContentOffset.memory.x)
     var newTargetOffset = Float(0)
     var scrollViewWidth = Float(scrollView.contentSize.width)

     if targetOffset > currentOffset {
         newTargetOffset = ceilf(currentOffset / pageWidth) * pageWidth
     } else {
         newTargetOffset = floorf(currentOffset / pageWidth) * pageWidth
     }

     if newTargetOffset < 0 {
         newTargetOffset = 0
     } else if newTargetOffset > currentOffset {
         newTargetOffset = currentOffset
     }

     Float(targetContentOffset.memory.x) == currentOffset

     scrollView.setContentOffset(CGPointMake(CGFloat(newTargetOffset), 0), animated: true)
}