Ios 当UIScrollView禁用弹跳时,滚动指示器卡住
我有这个问题,我在任何地方都找不到其他关于这个问题的提及 基本上,如果我在UIScrollView中禁用弹跳(因此UITableView等衍生产品也会受到影响),如果用户滚动到顶部,然后用另一个手势尝试使用快速滑动继续滚动,滚动指示器可能会卡住 一旦发生这种情况,滚动指示器将不会消失,除非用户再次滚动或点击滚动视图。最大的问题是scrollview将捕获该点击,因此如果您尝试点击一个表单元格,第一次什么也不会发生 我已经在我的设备和模拟器上用一个赤裸裸的应用程序进行了测试,这似乎只是UIScrollView和禁用弹跳的一个普遍问题;然而,就像我说的,我在互联网上找不到任何其他提及这一点的内容Ios 当UIScrollView禁用弹跳时,滚动指示器卡住,ios,cocoa-touch,uiscrollview,Ios,Cocoa Touch,Uiscrollview,我有这个问题,我在任何地方都找不到其他关于这个问题的提及 基本上,如果我在UIScrollView中禁用弹跳(因此UITableView等衍生产品也会受到影响),如果用户滚动到顶部,然后用另一个手势尝试使用快速滑动继续滚动,滚动指示器可能会卡住 一旦发生这种情况,滚动指示器将不会消失,除非用户再次滚动或点击滚动视图。最大的问题是scrollview将捕获该点击,因此如果您尝试点击一个表单元格,第一次什么也不会发生 我已经在我的设备和模拟器上用一个赤裸裸的应用程序进行了测试,这似乎只是UIScro
这只是一个bug吗?这是预期的行为吗?我做错什么了吗?如果这是一个bug,那么有人知道解决方法或修复方法吗?您是否为scrollview添加了点击手势,如果没有,请尝试添加它
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignsKeyboard)];
[self.scrollView addGestureRecognizer:singleTap];
singleTap.numberOfTapsRequired = 1;
singleTap.delegate = self;
在接口文件中添加委托UIgestureRecognitizerDelegate,然后实现点击手势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];
}
在我的例子中,我有两个
UIScrollView
s,一个嵌套在另一个中。
当内部滚动视图到达顶部时,我强制将contentOffset.y
设置为0
(我需要这样才能允许外部滚动视图开始滚动其内容视图)。这导致了此问题中描述的滚动视图不希望出现的行为
修复程序将contentOffset.y
设置为-1
,这允许滚动视图自然地(自行)回滚到0,并且取消挂起行为
希望这能帮助其他人✋ 我现在也有同样或类似的问题。我想我现在将启用反弹。。。正如您所说,当这个问题发生时,下一次点击将被表视图“吞没”,因此一个单元格必须点击两次才能被选中等等。嗨,伙计们,你们找到解决这个问题的方法了吗?谢谢。这个bug(或功能,无论什么)在iOS 11、5年后仍然存在。我想我知道的唯一“修复”是启用
。反弹。