我构建了一个包含mapView
(Google地图),tableView和UIScrollView
的项目。
tableView位于底部,当应用程序启动时,您会看到它的一小部分,其中大部分都在屏幕外(在底部)。当用户滚动时,tableView
被显示并从底部向上,直到它覆盖所有屏幕。这一切都有效,但我有一个小问题:我希望用户能够触摸地图(缩放,移动等),但UIScrollView
位于地图的顶部,当时用户尝试与地图交互,scrollView检测到滚动并且地图没有获得触摸事件。有UIScrollView
没有办法检测到地图区域的触摸吗? scrollView
应覆盖tableView
检测的所有屏幕(或者可能没有,还有另一种方式?)我不希望地图成为{{1}的子类因为当用户滚动时它会与表格一致(我希望scrollView
在地图上而不是在地图上)。
谢谢!
答案 0 :(得分:0)
取消我的评论。您需要在滚动视图上将顶部空间设置为superview约束。为约束创建一个IBOutlet,为约束的值创建一个浮点变量,并将它连接到您将在滚动视图的界面构建器中创建的超级视图约束。
你的.h:中的
IBOutlet NSLayoutConstraint *topSpace;
float topSpaceValue;
然后使用以下方法更新该约束:
topSpace.constant = topSpaceValue;
您可以使用此方法检测滚动视图中的滚动并设置topSpace约束:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
topSpace.constant = topSpaceValue;
}
现在,检测scrollview移动速度以及为topSpaceValue设置的值的实际逻辑由您决定。此外,您还需要检测滚动视图的移动方向,以增加或减少topSpaceValue的值。
这看起来就像检测速度所需的链接:iPhone UIScrollView Speed Check
所以根据速度,设置约束。并且您可能希望检查约束的最小值,例如0,因此滚动视图不会滚动到屏幕顶部。