2016-01-07 1 views
0

У меня есть приложение Ionic Tabs (я использовал шаблоны Cordova на Visual Studio 2015) с карточкой листов на второй вкладке. На первой вкладке у меня есть некоторые параметры поиска для POI, которые я хочу показать на карте с помощью маркеров. Все работает нормально, в том числе на карте отображаются все плитки, пока я не начну взаимодействовать с элементами управления на первой вкладке. В частности, когда я вхожу в элемент управления ввода и появляется мягкая клавиатура, если я затем перехожу во вторую вкладку, на карте отображается только первая плитка. Если я увеличиваю или уменьшаю масштаб, карта обновляется, но отображается только первая плитка. Проблема решена, хотя если я изменю ориентацию устройства.Leaftlet on Ionic Tabs Приложение показывает только первую плиту

Мягкая клавиатура - это не единственное, что вызывает проблему. Например, в Ripple мягкая клавиатура не отображается (я использую клавиатуру ноутбука), но через некоторое время манипулируя параметрами поиска на первой вкладке, карта перестает работать должным образом.

Кроме того, я пробовал API-интерфейс Mapbox вместо Leaflet, и проблема возникает точно так же.

+0

Было бы здорово, если бы вы могли добавить, какой результат вы ищете. Попытайтесь сделать это вопросом, а не заявлением. (-: - (FYI, этот вопрос возник в моей очереди просмотра) – Trevor

+0

Ok Trevor, так что вопрос будет следующим: «Как я могу предотвратить изменение карты листа с« страданиями », когда мягкая клавиатура загружается на экран?» Это ответ и работает! –

ответ

2

Экземпляр L.Map не может правильно вычислить его размеры, поскольку при инициализации родительский контейнер экземпляра имеет стиль display: none. Вы можете позвонить invalidateSize на вашем экземпляре карты, чтобы сделать его пересчитать это размеры, когда вкладка, содержащая карту показано:

Проверяет, если размер карты контейнера изменен и обновляет карту, если так - назовем это после того, как вы изменили размер карты динамически, а также анимацию панорамирования по умолчанию.

http://leafletjs.com/reference.html#map-invalidatesize

Я далеко не эксперт, но ионным по Docs/ссылки, ion-tab имеет on-select обратный вызов, где вы могли бы сделать это:

Вызывается при выборе этой вкладки ,

http://ionicframework.com/docs/api/directive/ionTab/

<ion-tab on-select="onTabSelected()"></ion-tab> 

function onTabSelected() { 
    //Assuming 'map' holds a reference to your map instance. 
    map.invalidateSize(); 
} 

Как уже упоминалось в комментариях ниже по вопросительным плаката, вышеуказанные работы, но так же прослушивание для $ionicView.enter события и используя invalidateSize в это обратный вызов:

$scope.$on('$ionicView.enter', function() { 
    map.invalidateSize(); 
}); 
+0

Сколько раз этот подобный вопрос до сих пор? :-) – ghybs

+0

Я думал то же самое: D Хотя я не получил его в сочетании с ионическим, насколько я помню :) В противном случае это о время мы отмечаем эти вопросы как дубликаты и создаем ответ сообщества wiki. – iH8

+1

iH8 да, что решило проблему :-) Я получил тот же результат с этим кодом: $ scope. $ On ('$ ionicView.enter', function() { map.invalidateSize(); }); –

Смежные вопросы