8

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

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

一旦发生这种情况,除非用户再次滚动或点击滚动视图,否则滚动指示器将不会消失。最大的问题是滚动视图将捕获该点击,因此如果您尝试点击表格单元格,第一次不会发生任何事情。

我已经在我的设备和模拟器上只使用准系统应用程序对此进行了测试,这似乎只是 UIScrollView 和禁用弹跳的一般问题;但是,就像我说的那样,我在互联网上找不到任何其他提及。

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

4

2 回答 2

1

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

修复方法是将 设置contentOffset.y-1,这允许滚动视图自然地滚动回0(自行),并且挂起行为被驳回

希望这对其他人有所帮助✋</p>

于 2018-12-18T09:29:56.427 回答
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];
}
于 2013-12-11T09:06:10.547 回答