У меня действительно странная проблема, которая началась около недели назад.
У меня есть ионное приложение v1, в котором используются карты Google (не плагин cordova, а веб-версия карт Google), и эти карты открываются в модальном режиме и всегда работают (по крайней мере, два года).
Код JS, который я сейчас имею, выглядит следующим образом
$scope.pickup_map = {
center: item.location,
zoom: 14,
control: pickupMapControl,
mapOptions: {
draggable: true,
disableDefaultUI: true,
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.RIGHT_CENTER
}
}
}
А затем в методе openModal:
$timeout(
() => {
const map = pickupMapControl.getGMap()
map.setCenter(new google.maps.LatLng(item.location.latitude, item.location.longitude))
google.maps.event.trigger(map, 'resize')
},
100
)
В html у меня есть:
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry&libraries=places&key=AIzaSyAUKvpku-JhbniZY80NLq_A2Ejgk_b_lUc&v=3.31" async></script>
а также
<ion-modal-view>
<ion-header-bar class="bar-calm">
<h1 class="title">Pick-up Location</h1>
<div class="button button-clear" ng-click="closeMapViewer()"><span class="icon ion-close"></span></div>
</ion-header-bar>
<ion-content class="pickup-location-viewer">
<ui-gmap-google-map
center="pickup_map.center"
zoom="pickup_map.zoom"
control="pickup_map.control"
options="pickup_map.mapOptions"
draggable="true"
data-tap-disabled="true"
ng-if="pickup_map.control"
>
<ui-gmap-circle center="marker.position" stroke="marker.stroke" fill="marker.fill" radius="marker.radius"></ui-gmap-circle>
<ui-gmap-marker coords="userPosition" icon="{ url: 'img/user-pos-icon.png' }" idKey="user"></ui-gmap-marker>
</ui-gmap-google-map>
</ion-content>
</ion-modal-view>
Это отлично работает как в Chrome, так и в Safari (в браузере рабочего стола), а также на устройствах Android.
Мой скриншот iOS выглядит так:
Я специально добавил скриншот, потому что знаю, что у многих людей есть опыт, когда логотип Google и т.д. Появляется внизу, но в этом случае этого не происходит.
Очень странно, что карта будет отображаться, если я масштабирую или перемещаю ее так немного, однако, при необходимости масштабируя или повторно центрируя карту программно, ничего не происходит.
Я проверил сетевые вызовы и вижу, что в iOS, API не отправляется в Google первоначально, пока я не перемещаю карту, тогда как в Интернете и Android они обязательно отправляются на открытие модального. Похоже, что проблема заключается в том, что по какой-то причине она не инициализируется должным образом в iOS, хотя, как упоминалось, ничего в базе кода не было изменено в последнее время.
Я понимаю, что в настоящее время самая последняя стабильная версия google-карт - v3.34, и я все еще использую v3.31, но я тестирую каждую инкрементную версию до v3.35, и ничто из этого не изменило ситуацию вообще.
Кроме того, но не так важно, что элементы управления масштабированием отсутствуют только в iOS, возможно, это связанная с этим проблема, хотя они даже не отображаются, как только карта действительно начинает отображаться.
Любые предложения по этой проблеме будут оценены!