2017-09-05 41 views
12

- 更新了新發現 - 在模擬器和設備上進行了測試。當應用程序從冷啓動運行時,地圖未正確加載。沒有顯示瓷磚。在iOS 11的xcode 9中 - 首次運行時加載Map瓦片問題

mapViewDidFinishLoadingMap未被調用。所以地圖不完成,但我沒有得到任何錯誤。

如果我只是簡單地走出應用程序,然後再次進入,地圖加載正常。這意味着如果從後臺打開應用程序,地圖就會被加載。

任何想法有什麼改變?在iOS的10

enter image description here

更新

工作就好在iOS系統11 mapViewWillStartLocatingUser被調用但不mapViewWillStartRenderingMap。我想知道是否需要手動調用某些東西,以便從地圖上渲染出來。在iOS中9(我考反對,並且它工作得很好)之前mapViewWillStartLocatingUser

+0

您是否在視圖控制器中的viewDidLoad方法中初始化MapView?如果是這樣,請嘗試將其移動到viewDidAppear方法。 –

+0

@KosukeOgawa剛剛嘗試過,但沒有任何區別。也不是我想要的東西,因爲這會破壞可用性,因爲地圖會經常重新加載。 – Christoffer

+0

現在我正在等待它,看看它是否會在以後的測試版中得到解決。否則我會回到試圖找到解決方案。 – Christoffer

回答

0

我想你應該嘗試通過消除

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

} 

,並把下面的代碼到你的瀏覽Didload方法

mapViewWillStartRenderingMap被稱爲
CGFloat edge = 10.0f; 

    UIImage *gotoUserLocationButtonImage = self.gotoUserLocationButton.imageView.image; 
    self.gotoUserLocationButton.frame = CGRectMake(edge, edge + self.statusBarHeight, gotoUserLocationButtonImage.size.width, gotoUserLocationButtonImage.size.height); 

    UIImage *getDirectionsButtonImage = self.getDirectionsButton.imageView.image; 
    [self.getDirectionsButton setFrame:CGRectMake(CGRectGetMaxX(self.gotoUserLocationButton.frame), edge + self.statusBarHeight, getDirectionsButtonImage.size.width, getDirectionsButtonImage.size.height)]; 
+0

我剛試過。不幸的是它沒有做任何事情 – Christoffer

+0

核心位置正在工作? –

+1

不確定你的意思。用戶位置工作並且也顯示在「地圖」上。正如你在上面的圖片中看到的那樣。你的意思是? – Christoffer

0

確保您沒有對地圖使用dispatch_async。

我有以下功能未在iOS11工作

dispatch_async(dispatch_get_main_queue(), ^{ 
    @synchronized(_queue) { 
     if(poppedMapView != nil) { 
      [self.queue removeObject:poppedMapView]; 
     } 
     [self.queue addObject:[[MKMapView alloc] init]]; 
    } 
}); 

改成了

if(poppedMapView != nil) { 
    [self.queue removeObject:poppedMapView]; 
} 
[self.queue addObject:[[MKMapView alloc] init]]; 
0

我有完全相同的問題,花了很多時間去尋找一個解決方案,最後我沒有。所以在我的情況下,問題是錯誤的inisializing。通常你會在viewController的頂部寫入let mapView = MKMapView(),然後在viewDidLoad內部的某個地方定製它,但在IOS 11 Beta 1之後,它停止工作。我通過更改爲var mapView:MKMapView來修復它?在viewController的頂部,然後在viewDidLoad裏面我inisializ就像mapView = MKMapView()。希望它能幫助別人! :)

0

要是同樣的問題,我斷碼看起來是這樣的:

class ViewController: UIViewController { 

    fileprivate var mapView = MKMapView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Add the mapView to the VC 
     mapView.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(mapView) 
     mapView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     mapView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     mapView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
     mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 
    } 
} 

因爲它在iOS的11變成了它不喜歡具有的MKMapView初始化視圖控制器加載之前即viewDidLoad中(),所以FIX被更改爲:

class ViewController: UIViewController { 

    fileprivate var mapView: CSMapView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Init instance here. 
     mapView = CSMapView() 

     // Add the mapView to the VC 
     mapView?.translatesAutoresizingMaskIntoConstraints = false 
     ... 
    } 
} 

還試圖把它在初始化方法,但這並沒有爲我工作:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    mapView = MKMapView() 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    mapView = MKMapView() 
}