Google Maps странное поведение swift 4 ios - PullRequest
0 голосов
/ 20 сентября 2018

Обновление : Доза это имеет отношение к языку?мое приложение работает на английском и арабском языках.

Привет всем, я борюсь с этим уже много дней, и я попробовал все, но не могу найти никакого решения, проблема в том, что когда я запускаю приложение через xCode, все работает нормальнокак на следующем скриншоте.working maps

Затем, когда я отключаю устройство и снова открываю приложение, оно перестает работать, приложение работает нормально, но я не вижу никакой карты, кроме маркеров, как на следующем скриншоте.not working map

Любая помощь будет оценена.

AppDelegate

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    GMSServices.provideAPIKey(googleApiKey)
    GMSPlacesClient.provideAPIKey(googleApiKey)       
    return true

}

ViewController

     //Step 1
     @IBOutlet weak var mapview: GMSMapView!

      //Step 2
     override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            self.mapview.settings.scrollGestures = true
            self.mapview.settings.zoomGestures = true
            self.mapview.isMyLocationEnabled = true
            self.mapview.settings.myLocationButton = true
            self.mapview.delegate = self
            self.mapview.layoutIfNeeded()

        }

    }

    //Step 3 After we have the current location items are loaded from server by user location and the markers are added in GetBusinesses function
    extension ItemsList: CLLocationManagerDelegate {
        func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
            guard status == .authorizedWhenInUse else {
                return
            }
                self.locationManager.startUpdatingLocation()

                self.mapview.camera = GMSCameraPosition(target:  (self.locationManager.location?.coordinate)!, zoom: 14, bearing: 0, viewingAngle: 0)
                self.GetBusinesses(data: "&isOpen=2&cat=\(Prefrences.getSelectedCategoryId())")
        }
    }

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Хорошо, так что после многих дней борьбы и попытки найти все глупые способы исправить это, я наконец нашел решение.Основная проблема заключалась в том, что если ваше приложение поддерживает несколько языков, Google Map покажет такое поведение.Ниже приведены шаги для его исправления.

Шаг 1: Если у вас есть представление GMSMapView в вашем viewController, прервет выходы вашего GMSMapView, так как он будет создан динамически .

Шаг 2: Установите язык приложения в соответствии с настройками пользователя.

Шаг 3: Создание пользовательскихОбъект GMSMapView устанавливает методы делегата и другие необходимые настройки и добавляет его в свой контейнер.

Вот и все, все готово.Из этого я понял, что перед созданием GMSMapView необходимо сначала установить язык приложения ( Я тоже могу ошибаться ).Если кто-нибудь знает, почему этот метод работает, пожалуйста, объясните это.

    //Our Custom MapView Var
    var mapview: GMSMapView!


    //View viewDidLoad() function
    override func viewDidLoad() {
            super.viewDidLoad()
            /*
              TODO: 
              Get selected language from preferences and set accordingly. 
            */
            UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
            UserDefaults.standard.synchronize()

            let camera = GMSCameraPosition.camera(withLatitude: 55.277397,
                                                  longitude: 25.199514,
                                                  zoom:12)
            self.mapview = GMSMapView.map(withFrame: self.mMapContainer.bounds, camera: camera)
            self.mapview.delegate = self
            self.mapview.isMyLocationEnabled = true
            self.mapview.settings.myLocationButton = true
            self.mapview.isMyLocationEnabled = true
            self.mapview.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            mMapContainer.addSubview(self.mapview)
}
0 голосов
/ 21 сентября 2018

чтобы показать карту в пользовательских видах, вы должны сделать это таким образом,

 let camera = GMSCameraPosition.camera(withLatitude: lat , longitude: long, zoom: 15.0)
    let mapView = GMSMapView.map(withFrame: CGRect(x: 2, y: 2, width: self.MapView.frame.width - 4, height: self.MapView.frame.height - 2), camera: camera)
    self.MapView.addSubview(mapView)
    self.MapView.clipsToBounds = true
    self.MapView.contentMode = .center

вам нужно создать mapView, используя созданный mapView на кадре раскадровки, и добавить его в качестве subView в основной MapView.Вы создали

...