UIScrollView 在 4 英寸上工作,在 3.5 英寸上不响应任何触摸
Posted
技术标签:
【中文标题】UIScrollView 在 4 英寸上工作,在 3.5 英寸上不响应任何触摸【英文标题】:UIScrollView works on 4-inch, doesn't respond to any touch on 3.5-inch 【发布时间】:2014-03-02 22:31:52 【问题描述】:我有一个奇怪的问题,我的一个视图有一个滚动视图,它在 4 英寸设备上完美运行,无论是在模拟器还是实际设备上。相同的滚动视图(以及其中的视图)不会响应 3.5 英寸设备(相同的 ios 版本,7.0.3)中的任何触摸事件(点击和滚动)。它虽然呈现/显示完美。我什至尝试直接向视图本身添加一个点击处理程序以查看它是否会命中(categoriesScrollView 是我的视图):
//viewDidLoad:
UITapGestureRecognizer *test = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(test)];
[categoriesScrollView addGestureRecognizer:test];
-(void)test
NSLog(@"test");
它没有击中。视图内部有按钮,可以在 4 英寸设备上完美点击。设备和模拟器都会出现此问题。我检查的第一件事是任何设备/屏幕尺寸特定的代码,但没有任何代码。我检查的第二件事是布局约束:也许滚动视图的实际边界在 3.5 英寸设备上变得更小(甚至可能为零),但我检查了框架并且一切正常(滚动视图有 clipsToBounds
设置无论如何,YES
,所以如果是这种情况,内容无论如何都是不可见的。
除此滚动视图及其子视图外,同一视图内的所有其他视图都在正常接收触摸/运行。我想不出还有什么,这可能是什么原因造成的?
【问题讨论】:
这真的很奇怪。我看不出这与屏幕尺寸有什么关系,但userInteractionEnabled
在这两种情况下都设置为 YES 吗?此外,在 3.5 英寸“版本”上,是否有一些透明视图(或其中的一部分)超出了您的滚动视图并吞下了触摸事件?
是的,userInteractionEnabled
在每种情况下都是YES
(无论如何我都没有碰它,它在 IB 中设置为 YES,但仍然在运行时检查它)我也想过另一个视图重叠并消耗了触摸,但显然情况并非如此。下面还有另一个滚动视图,为了检查它是否与我有问题的视图重叠,我还添加了一个手势识别器来输出其他内容,当我点击它时它会正确输出,但当我点击它时不输出任何东西我有问题的观点。如果另一个滚动视图确实与此视图重叠,则无论如何它都应该输出。
您是否尝试为滚动视图设置委托,实现scrollViewWillBeginDragging:
并查看它是否被调用?如果没有,您应该尝试为您的 UIScrollView 使用“假”临时子类并实现 –touchesBegan:withEvent:
、–touchesMoved:withEvent:
、–touchesEnded:withEvent:
方法(来自 UIResponder
)以查看它们是否被调用。如果您确实创建了这个子类,请不要忘记在 Interface Builder 中设置自定义类名。 注意:我会删除测试手势识别器,因为它可能会在处理后取消触摸事件。
好的,有问题了。我首先在滚动视图顶部的主视图内的某个位置放置了另一个按钮(但滚动视图位于另一个容器顶部栏内),该按钮起作用了。我已经将按钮移动到具有滚动视图(在其顶部)的同一个容器内,但它在为我敲响警钟的地方不起作用。显然,我有一个指标,该指标位于下面的主要中心,顶部约束到顶部栏。顶部栏有clipsToBounds
设置为没有NO
并且指示器将顶部栏的大小推到几乎为零,使滚动视图绘制但不响应触摸。
【参考方案1】:
我已经解决了这个问题。我首先在滚动视图顶部的主视图内的某处放置了另一个按钮(但滚动视图位于另一个容器顶部栏内),该按钮起作用了。然后,我将按钮移动到具有滚动视图(在其顶部)的同一个容器内,但它在为我敲响警钟的地方不起作用。显然,我有一个进度指示器,该指示器位于下面的主要中心,顶部约束到顶部栏。顶栏有clipsToBounds
没有设置NO
并且指示器将顶栏的大小推到几乎为零,使滚动视图绘制但不响应触摸。这是一个简单的自动布局问题,包含滚动视图的顶部栏没有将滚动视图裁剪到其边界之外,这使得该错误更难找到。
【讨论】:
以上是关于UIScrollView 在 4 英寸上工作,在 3.5 英寸上不响应任何触摸的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小
修改现有的 4 英寸故事板以在 3.5 英寸屏幕上工作 [重复]