2015-10-06 34 views
1

反正是有防止tableview中被拖累經過上同時仍允許其反彈?的UITableView - 防止反彈時沒有禁用反彈

我有一個tableview中,我可以向上拖動到覆蓋全屏幕。將其拖回時,它有時仍然處於滾動模式,因此不必拖拽整個容器視圖,而是允許tableview滾動到頂部之外。

如果我禁用反彈,這樣可以修復它,但我想以某種方式繼續反彈,但禁用抓住它在該州,並繼續拖動的能力。

是這樣的:

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

我也嘗試下面的代碼,但它基本上做同樣的事情如[_tableView setBounces:NO]

if (scrollView.contentOffset.y < 0) { 
    [scrollView setContentOffset:CGPointMake(0, 0)]; 
} 
+0

這個問題需要澄清。沒有過度滾動是不可能有反彈效果的。你是否在討論嵌套視圖中的反彈效應? – tanner0101

回答

-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) 
} 
0

我嘗試添加這scrollViewDidScroll和它防止從拖動時過滾動但允許通過減速滾動(反彈):

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

試試這個:

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