当UIScrollView禁用弹跳时,滚动指示器会被卡住

时间:2013-06-09 00:17:01

标签: ios cocoa-touch uiscrollview

我有这个问题,我在任何地方都找不到任何其他的提及。

基本上,如果我在UIScrollView中禁用弹跳(因此UITableView等派生也会受到影响),如果用户滚动到顶部,则可能会使滚动指示器卡住,然后,使用另一个手势,尝试继续滚动快速刷卡。

一旦发生这种情况,滚动指示器将不会消失,除非用户再次滚动或点击滚动视图。最大的问题是scrollview会捕获那个tap,所以如果你试着点击表格单元格,第一次就不会发生任何事情。

我在我的设备和模拟器上只使用了一个准确的应用程序来测试它,它似乎只是UIScrollView的一般问题并且禁用弹跳;但是,就像我说的,我在互联网上找不到任何其他的提及。

这只是一个错误吗?这是预期的行为吗?难道我做错了什么?如果这是一个错误,那么有没有人知道解决方法或修复?

2 个答案:

答案 0 :(得分:0)

您是否为滚动视图添加了点按手势,如果没有,请尝试添加?

   UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self    action:@selector(resignsKeyboard)];
    [self.scrollView addGestureRecognizer:singleTap];
    singleTap.numberOfTapsRequired = 1;
    singleTap.delegate = self;

在接口文件中添加委托UIGestureRecognizerDelegate,然后实现点击手势delgate方法

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
 if (self.scrollView.superview != nil)
    {
        if ([touch.view isKindOfClass:[UIButton class]]||[touch.view.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview isKindOfClass:[UITableViewCell class]])
            // we touched our control surface
        {
            return NO; // ignore the touch
        }

    }

    return YES; // handle the touch
}

//要像退出键盘一样对滚动触摸执行其他操作,请根据需要使用

-(void) resignsKeyboard
{
    [self.view endEditing:YES];
    [self.scrollView setContentOffset:CGPointMake(0,0) animated:YES];
}

答案 1 :(得分:0)

就我而言,我有两个UIScrollView,一个嵌套在另一个内部。 当内部滚动视图到达顶部时,我将contentOffset.y强制设置为0(我需要这样做以允许外部滚动视图开始滚动其内容视图)。这导致了滚动视图在此问题中描述的不良行为。

此修复程序是将contentOffset.y设置为-1,这允许滚动视图自然地(本身)滚动回到 0 ,并且挂起行为为被解雇

希望这对其他人有帮助