2016-09-28 9 views
3

他の誰かがMKMapView(あるいは他の多くのビューに関係するかもしれません)の問題を抱えているのでしょうか?奇妙なことに、最初に画面を読み込むときのデフォルトサイズは1000x1000です。私は別の画面に踏み込んで、地図画面に戻ってくると、実際に自分のすべての制約に追いついた。Xcode8で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に関連していますか?

+0

正確には何ですか? – vaibhav

+0

問題は、マップが親Viewのサイズに従っていないことです。 "Debug View Hierarchy"を調べると、MKMapViewのサイズが1000x1000で、親ビューの範囲外だったことがわかりました。 –

+0

内部プログラムのmapViewのフレームサイズを下に設定します。 – vaibhav

答えて

1

あなたの初期化子は、そのスーパーのbounds、ないframeを使用する必要があります。幅と高さを確保するために

(lldb) po self.aConstrainedView.bounds 

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

は、このライン上やデバッガの使用中にブレークポイントを設定しますは正しい。 viewDidLoadでマップビューを追加している場合、それは早すぎます。

- (void)viewDidLayoutSubviews { 
    dispatch_once(
     // Add map view here 
    ); 
} 
をし、あなたのサブビューは、すべての制約に応じてレイアウトされた後にそれが呼び出されるように、そこにあなたのコードを追加します:あなたがオーバーライドする必要があります。

+0

私にとっては、viewDidLoadでマップビューを追加するのが当てはまりました。私はそれを提案された解決策に移し、それを一度派遣しました。 –

+0

コードでのみ修正できます。ストーリーボードと制約はどうですか? –

関連する問題