Lennaert van Dijke
Lennaert van Dijke

Reputation: 138

MKMapView defaults to 1000x1000 in Xcode8

I'm wondering if anyone else has the issue that MKMapView (Or maybe it relates to many other Views?) does a strange thing where it defaults to 1000x1000 in size the first time I load a screen. When I segue to another screen, and segue back to the map screen, then it actually followed up all my constraints.

This didn't happen with Xcode7 and I wonder if someone knows there's a known bug in Xcode8 or something?

MapKitView get loaded programmatically and is added as a subview within my View that has the constraints.

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];

Could this be related to Autoresizing issue in Xcode 8 ?

Upvotes: 3

Views: 149

Answers (1)

norders
norders

Reputation: 1252

Your initialiser should use the bounds of its superview, not the frame:

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

Set a breakpoint on this line and in the debugger use:

(lldb) po self.aConstrainedView.bounds 

to ensure the width and height are correct. If you're adding the map view in viewDidLoad, then that's too early. You should override:

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

and add your code in there, as that gets called after your subviews have all been laid out according to your constraints.

Upvotes: 1

Related Questions