2015-10-06 5 views
1

Есть ли все-таки, чтобы предотвратить перетаскивание стола из-за верхней части, все еще позволяя ему отскочить?UITableView - предотвращение прокрутки без отключения отскока

У меня есть табличное представление, которое я могу перетащить, чтобы покрыть весь экран. При перетаскивании назад он иногда по-прежнему будет находиться в режиме прокрутки, поэтому вместо перетаскивания всего вида контейнера вниз он позволит прокручивать таблицу вверху.

Если я отключу отскок, это исправляет его, но я хотел бы как-то сохранить отскок, но отключить возможность поймать его в этом состоянии и продолжить перетаскивание.

Что-то вроде:

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; 
    } 
} 
Смежные вопросы