Objective c MKMapView平移会导致父UIScrollView滚动

Objective c MKMapView平移会导致父UIScrollView滚动,objective-c,ios,uiscrollview,mkmapview,mapkit,Objective C,Ios,Uiscrollview,Mkmapview,Mapkit,我已将MKMapView添加到UIScrollView。我认为预期的功能是平移地图会导致地图移动,但它的父UIScrollView不会滚动。i、 e.如果您平移地图,滚动视图将保持在当前位置 这是我的代码: scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)]; [scrollView setAutoresizingMask:UIViewAutoresizin

我已将MKMapView添加到UIScrollView。我认为预期的功能是平移地图会导致地图移动,但它的父UIScrollView不会滚动。i、 e.如果您平移地图,滚动视图将保持在当前位置

这是我的代码:

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)];
    [scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
    [self.view addSubview:scrollView];

    double mapHeight = 200;
    if([AppDelegate isRunningOniPad])
        mapHeight = 400;

    map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.width, mapHeight)];
    [map setExclusiveTouch:NO];
    [scrollView map];
我试过将“独家触控”设置为“是”和“否”,但似乎没有任何效果


是否有一种方法可以让行为正常工作,以便平移地图可以阻止UIScrollView移动?我也尝试过将地图更改为UIScrollView而不是MKMapView,但其行为相同-因此我怀疑这是否是MKMapView特有的。

预期结果是正确的,当触摸地图视图时,滚动视图应保持静止,因为这应该在触摸事件向上传递到响应器链到滚动视图之前接收触摸事件

我已经在一个空项目中快速测试了上面的代码,这与预期的一样,在创建帧和大小、iPad大小检测以及将地图添加为滚动视图的子视图方面进行了一些修改

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
// Make the content size large to allow scroll view to move
[scrollView setContentSize:CGSizeMake(1000, 2000)];
[self.view addSubview:scrollView];

double mapHeight = 200;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    mapHeight = 400;
}

MKMapView *map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.view.bounds.size.width, mapHeight)];
[map setExclusiveTouch:NO];
[scrollView addSubview:map];

预期结果是正确的,当触摸地图视图时,滚动视图应保持静止,因为这应在触摸事件通过响应器链传递到滚动视图之前接收到触摸事件

我已经在一个空项目中快速测试了上面的代码,这与预期的一样,在创建帧和大小、iPad大小检测以及将地图添加为滚动视图的子视图方面进行了一些修改

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
// Make the content size large to allow scroll view to move
[scrollView setContentSize:CGSizeMake(1000, 2000)];
[self.view addSubview:scrollView];

double mapHeight = 200;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    mapHeight = 400;
}

MKMapView *map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 200, self.view.bounds.size.width, mapHeight)];
[map setExclusiveTouch:NO];
[scrollView addSubview:map];

如果它对任何人都有帮助

MKMapView
添加到
UIScrollView
应该可以正常工作。在我的情况下,它不起作用,因为我的视图层次结构设置不正确

如果您遇到问题,请查看如何添加子视图(即
[self.view addSubview:mapView]
。确保
MKMapView
正确地位于
UIScrollView
的层次结构中


另外,我非常喜欢revealapp.com检查视图层次结构(不,我与它们没有关联;)

以防它对任何人都有帮助

MKMapView
添加到
UIScrollView
应该可以正常工作。在我的情况下,它无法正常工作,因为我的视图层次结构设置不正确

如果您遇到问题,请查看如何添加子视图(即
[self.view addSubview:mapView]
。确保
MKMapView
正确地位于
UIScrollView
的层次结构中


另外,我非常喜欢revealapp.com检查视图层次结构(不,我与它们没有关联;)

谢谢你的建议。我也创建了几个演示项目,我看到了正确的行为——正如你所说。因此,我完全删除了我的类,并用一个空类替换了你在viewDidLoad中发布的代码。但是,在我的项目中仍然会发生同样的情况……但在其他项目中,完全相同的类可以正常工作,因此我重新开始ally困惑了。据我所知,这与视图位于选项卡视图控制器或导航控制器内的事实无关。如果添加视图时没有这些控件,则其行为相同。项目中是否有任何地方禁用了用户与MKMapView的交互?因为这将阻止地图检测到触摸查看并传递到滚动视图。使用选项卡/导航控制器应该不会有什么区别,因为滚动视图和地图视图是它们的子视图。否-我已经尝试过执行您所做的操作,只是在init或viewdiload中本地声明地图,所以在创建地图后,其他任何东西都无法访问它。我不认为选项卡/导航控制器会我不知道发生了什么,所以我想尝试一下!谢谢你的帮助-这是我在项目中使用的Dakeyboard控件的一个错误。我在github上提出了一个控件错误-谢谢你的建议。我也创建了两个演示项目,我看到了正确的行为-正如你所说的。因此,我完全删除了我的类,并用一个空类替换了它,该类的代码与您在viewDidLoad中发布的代码相同。但是,在我的项目中仍然会发生相同的情况……但是,完全相同的类在其他项目中工作得很好,所以我真的很困惑。就我所见,它与视图位于选项卡视图控制器中这一事实无关r导航控制器。如果添加时没有这些控制器,则其行为相同。项目中是否有任何地方禁用用户与MKMapView的交互?因为这将阻止地图视图检测到触摸并传递到滚动视图。使用选项卡/导航控制器不应产生任何影响,因为滚动和地图视图s是它们的子视图。不-我试着做你所做的,只是在init或viewDidLoad中本地声明地图,所以在创建地图后,其他任何东西都无法访问它。我不认为tab/nav控制器会有什么不同,但我不知道发生了什么,所以我想我会尝试一下!感谢你的帮助-结果是我在项目中使用的Dakeyboard控件的bug。我在github上提出了一个控件的bug-