У меня действительно странная проблема, которая начала происходить около недели назад.
У меня есть приложение ionic 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, возможно, это связанная проблема, хотя они даже не отображаются, когда карта действительно начинает отображаться.
Любые предложения по этой проблеме будут оценены!