我有一个带有一行按钮的水平滚动视图。除非我进行极快速的滑动,否则滚动视图不会滚动。
如果我将按钮设置为userInteractionEnabled = NO,则滚动按预期工作,但当然按钮根本不起作用。
此应用在iOS 7及以前版本中运行良好。它似乎是iOS 8"功能"。我注意到我可以抓住按钮的拖动事件,但我不知道如何将其重定向回scrollView。
我认为我需要用UIViews替换我的按钮并亲自管理这些活动,但如果有人有其他想法或解决方案,我将感激不尽。
答案 0 :(得分:39)
我发现在iOS 8中,UIScrollView的底层UIPanGestureRecognizer不遵守UIScrollView的delaysContentTouches属性。我认为这是iOS 8的错误。这是我的解决方法:
theScrollView.panGestureRecognizer.delaysTouchesBegan = theScrollView.delaysContentTouches
答案 1 :(得分:24)
我在UITableView上遇到了这个问题,它有自定义UITableViewCells和UIButtons。我把它放在我的UITableview类中。
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return YES;
}
解决了我的问题。
编辑:要清除,您可以创建UIScrollview的子类并添加它来解决问题。答案 2 :(得分:10)
这个黑客对我有用:
UITapGestureRecognizer *nothingTap = [[UITapGestureRecognizer alloc] init];
nothingTap.delaysTouchesBegan = YES;
[_scrollView addGestureRecognizer:nothingTap];
答案 3 :(得分:8)
我创建了UIScrollView
的子类来解决此问题。你只需要这个方法:
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
UITouch *touch = [touches anyObject];
if(touch.phase == UITouchPhaseMoved)
{
return NO;
}
else
{
return [super touchesShouldBegin:touches withEvent:event inContentView:view];
}
}
然后只需记住在故事板中将类设置为子类,如果您正在使用它,那么您就可以了。
答案 4 :(得分:0)
我有同样的问题,我通过创建UIScrollView
的子类并将其cancelContentTouches
值设置为TRUE
并且工作正常来解决它。
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return YES;
}
希望它对你有用。