【问题标题】:MKMapView defaults to 1000x1000 in Xcode8MKMapView 在 Xcode8 中默认为 1000x1000
【发布时间】:2017-02-06 08:58:01
【问题描述】:

我想知道是否有其他人遇到 MKMapView(或者它可能与许多其他视图有关?)在我第一次加载屏幕时默认为 1000x1000 大小的奇怪事情。当我切换到另一个屏幕并切换回地图屏幕时,它实际上遵循了我的所有约束。

Xcode7 没有发生这种情况,我想知道是否有人知道 Xcode8 中存在已知错误或其他什么?

MapKitView 以编程方式加载,并作为子视图添加到具有约束的视图中。

MKMapView *mapkitView = [[MKMapView alloc] initWithFrame:self.aConstrainedView.frame];
[self.mapkitView setDelegate:self];
[self.mapkitView setShowsUserLocation:YES];
[self.mapkitView setRotateEnabled:NO];
[self.aConstrainedView addSubview:self.mapkitView];

这可能与Autoresizing issue in Xcode 8 有关吗?

【问题讨论】:

  • 到底是什么问题?
  • 问题是地图没有跟随父View的大小。使用“Debug View Hierarchy”调查显示 MKMapView 的大小为 1000x1000 并且超出了父视图的范围。..
  • 在程序内部设置mapView的帧大小见下面我的回答..
  • 我看到与故事板创建的 MKMapView 类似的东西。可能与 Xcode 8 中的this bug 有关?
  • 在 xcode 8 中完全遇到了同样的问题。当我重新打开 xcode 和我的应用程序并转到我在情节提要中存在 mapview 的视图控制器时,地图会发生变化。所有约束都失败

标签: objective-c xcode8


【解决方案1】:

您的初始化程序应该使用其父视图的bounds,而不是frame

MKMapView *mapkitView = [[MKMapView alloc] initWithFrame:self.aConstrainedView.bounds];

在此行设置断点并在调试器中使用:

(lldb) po self.aConstrainedView.bounds 

确保宽度和高度正确。如果您在 viewDidLoad 中添加地图视图,那还为时过早。您应该覆盖:

- (void)viewDidLayoutSubviews {
    dispatch_once(
        // Add map view here
    );
}

并在其中添加您的代码,因为在您的子视图都根据您的约束布局后调用。

【讨论】:

  • 对我来说,在 viewDidLoad 中添加地图视图就是这种情况。我将其移至建议的解决方案并发送一次。
  • 只能通过代码修复。?故事板和约束呢?
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 2014-11-18
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
相关资源
最近更新 更多