2017-09-05 2 views
12

- Mit neuen Erkenntnissen aktualisiert - Getestet sowohl im Simulator als auch auf dem Gerät. Maps werden nicht korrekt geladen, wenn die App von einem Kaltstart aus ausgeführt wird. Fliesen werden nicht angezeigt.In xcode 9 mit iOS 11 - Problem beim Laden der Kartenkacheln beim ersten Lauf

mapViewDidFinishLoadingMap wird nicht aufgerufen. Es läuft also etwas schief, damit die Karte nicht endet, aber ich bekomme keine Fehler.

Die Karte wird geladen, wenn ich nur kurz aus der App gehe und dann wieder rein. Das bedeutet, dass die Karten geladen werden, wenn die App vom Hintergrund aus geöffnet wird.

Irgendwelche Ideen, was hat sich geändert? Funktionierte gut in iOS 10.

enter image description here

aktualisieren

In iOS 11 mapViewWillStartLocatingUser wird genannt, aber nicht mapViewWillStartRenderingMap. Ich frage mich, ob ich etwas manuell aufrufen muss, damit das Rendern der Map gestartet wird. In iOS 9 (was gegen ich testen, und wurden es funktioniert ganz gut) mapViewWillStartRenderingMap wird aufgerufen, bevor mapViewWillStartLocatingUser

+0

Initialisieren Sie die MapView in der viewDidLoad-Methode in Ihrem View-Controller? Wenn ja, versuchen Sie, es in die viewDidAppear-Methode zu verschieben. –

+0

@KosukeOgawa Gerade versucht, aber macht keinen Unterschied. Auch nicht etwas, was ich möchte, da dies die Benutzerfreundlichkeit ruinieren würde, da die Karte oft neu geladen würde. – Christoffer

+0

Momentan warte ich darauf, ob es in späteren Beta-Versionen gelöst wird. Sonst werde ich wieder versuchen, eine Lösung zu finden. – Christoffer

Antwort

0

ich Sie denken

Durch das Entfernen

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

} 

und Putting folgenden Code in Ihre Ansicht Didload Methode versuchen sollte

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

Ich habe es gerade versucht. Leider hat es nichts getan – Christoffer

+0

Core-Standorte funktionieren? –

+1

Nicht sicher, was du meinst. Der Benutzerstandort funktioniert und wird auch auf der "Karte" angezeigt. Wie Sie auf dem Bild oben sehen können. Meinst du das? – Christoffer

0

Stellen Sie sicher, dass Sie dispatch_async nicht für die Karte verwenden.

Ich hatte die folgende Funktion, die nicht in iOS11 funktioniert hat

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

es geändert zu

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

Ich hatte genau gleiches Problem, verbrachte ich eine Lösung und schließlich eine Menge Zeit zu finden hat getan. Also in meinem Fall war das Problem mit falscher Inizialisierung. Normalerweise würde man mapView = MKMapView() oben auf den viewController schreiben und dann irgendwo später in viewDidLoad anpassen, aber nach IOS 11 Beta 1 funktioniert es nicht mehr. Ich habe es behoben, indem ich in var mapView gewechselt habe: MKMapView? oben auf dem ViewController und dann in ViewDidLoad inisialisiere ich es wie mapView = MKMapView(). Hoffe es hilft jemandem! :)

0

Haben gleiches Problem meines gebrochenes Code sah so etwas wie:

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 
    } 
} 

Wie es in iOS 11 es nicht, wie der MKMapView initialisieren, die nicht eingeschaltet, bevor die View-Controller geladen dh viewDidLoad() so FIX wechselte zu:

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 
     ... 
    } 
} 

auch versuchte, es in init Methoden setzen, aber das ist für mich nicht funktioniert hat:

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() 
} 
Verwandte Themen