【问题标题】:MKMapView inside a UIScrollView doesn't move with swipesUIScrollView 内的 MKMapView 不会随滑动而移动
【发布时间】:2010-10-01 05:17:51
【问题描述】:

我有一个带有各种标签的详细视图,可以提供有关地点的信息(地址、电话等)。提供的信息比 iPhone 屏幕高,所以它们都在 UIScrollView 中(本身在 UIView 中),您可以上下滑动查看所有内容。

我在滚动视图中也有一个 MKMapView。当它没有附加到 Interface Builder 中的任何东西时,它会随着滚动视图上下移动,因为它应该保持与滚动视图中其他控件的正确相对位置。您可以玩地图,缩放和平移地图等,默认显示您当前的位置。

但是,一旦我将它连接到 IB 中的 MKMapView 变量,地图视图就不再随滚动视图一起滚动。相反,它实际上只是位于最初显示的位置(视图底部,视图底部下方隐藏了一点地图),并且滚动视图在其后面上下滚动。

这里发生了什么?我尝试在 IB 中更改一堆地图视图和滚动视图的属性,但没有效果。我唯一没有尝试过的就是完全用代码创建地图视图,但这似乎不是一个明显的解决方案。

编辑:对于过期的赏金向大家道歉。我被挂在项目的其他领域,直到现在才回到这里。我不知道它会过期。

进一步编辑:嗯,我发现了我的问题。由于我完全不知道的原因,我有

[self.view addSubview:mapView];  

在 viewcontoller 的 ViewDidLoad 中。一旦它被连接起来,那一行代码就会(显然)使地图成为我的视图的子视图,有效地将其从滚动视图中拉出来。

愚蠢的错误,很抱歉浪费了您的时间(和赏金)。在我认为回答者有机会看到结果后,我将删除此问题。

【问题讨论】:

  • 不要删除问题。我以前犯过这个错误,我认为这是 iPhone/Mac 开发人员的常见错误。最好留下整个线程并让其他人从中学习。
  • 感谢您没有删除问题。我遇到了同样的问题,它也帮助了我。

标签: iphone cocoa-touch ios uiscrollview mkmapview


【解决方案1】:

看起来您正在使用 ScrollView,您需要在 DetailView 中使用滚动功能。

我没有使用 ScrollView ,而是有一个替代方案 ....

您可以使用 TableView 而不是 ScrollView 来试试运气。

只需将所有标签和 mapView 放在一个视图中,然后将该视图放在 TableView 的标题中。

像这样:

UITableView

--> 查看

----->所有标签 // 在 singleView 内

----->MKMApView // 在视图的底部

您仍然可以玩地图、缩放和平移地图等,它会默认显示您当前的位置。

希望这个替代方案可以解决您的问题.......

一切顺利

【讨论】:

  • 啊,嗯。好的,如果我不能让它以任何其他方式工作,那么我会尝试,谢谢。
  • 没关系,我的简单(且莫名其妙)的错误,请参阅上面的进一步编辑。
【解决方案2】:

如果在 IB 中连接一个插座会破坏一个正常工作的视图,您可以尝试这样做以在运行时定位该视图:

- (UIView *) findClass:(Class) aClass inView:(UIView *) aSuperview {
    for ( UIView *view in aSuperview.subviews ) {
        if ( [view isKindOfClass: aClass] ) break;
        if ( ( view = [self findClass: aClass inView: aSuperview] ) ) break;
    }

    return view;
}

- (void) viewDidLoad {
    MkMapView   *map = [self findClass: [MkMapView class] inView: self.view];
}

【讨论】:

  • 有趣的想法。我试了一下,但不幸的是,在构建时,viewDidLoad 中的 MKMapViews 无法识别。我不太明白为什么: 包括在内,并且(显然)包括 MapKit 框架。对标头界面中的 MKMapView 声明非常满意。知道为什么吗?
  • 没关系,我的简单(且莫名其妙)的错误,请参阅上面的进一步编辑。
【解决方案3】:

我发现了我的问题。由于我完全不知道的原因,我有

[self.view addSubview:mapView];  

在 viewcontoller 的 ViewDidLoad 中。一旦它被连接起来,那一行代码就会(显然)使地图成为我的视图的子视图,有效地将它从滚动视图中拉出来。

【讨论】:

    【解决方案4】:

    您是否在UIViewControllerviewDidLoad 方法中将setContentSize 属性设置为内容的大小?

    【讨论】:

    • MKMapView 没有 contentSize 属性。
    • 没关系,我的简单(且莫名其妙)的错误,请参阅上面的进一步编辑。
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多