#javascript #appcelerator #navbar #orientation-changes
#javascript #appcelerator #панель навигации #ориентация-изменения
Вопрос:
Я создаю приложение с несколькими вкладками для iPhone. перефразировал вопрос на веб-сайте appcelerator здесь
Когда я переключаюсь с книжной ориентации на альбомную, я хочу скрыть навигационную панель.
это работает нормально, если я не переключаюсь на другую вкладку. Но когда я просматриваю 1 вкладку в портретном режиме, переключаюсь на другую вкладку, переключаюсь на альбомный режим, переключаюсь обратно на первую вкладку, а затем переключаюсь на обратный портрет, навигационная панель (window.barImage) полностью растягивается (до размера альбомной панели навигации)
Также, когда я удаляю весь свой код для скрытия навигационной панели, возникает та же проблема.
Я попытался снова установить гистограмму в orientationchange, но это тоже не помогает.
примечание для сайта: я использую одно и то же изображение на каждой вкладке для навигационной панели, может ли это быть проблемой?
Я выделил зеленым изображение навигационной панели, синяя часть находится там, где обычно должно быть изображение.
Также обратите внимание, что изображение имеет правильный размер для портретного отображения навигационной панели.
код:
var windowWidth = Ti.Platform.displayCaps.platformWidth;
var catWin = Ti.UI.createWindow({
title:'',
barImage: 'images/barImage.png',
url:'vacancies/categories.js',
width: windowWidth
});
catWin.orientationModes = [
Titanium.UI.PORTRAIT,
Titanium.UI.LANDSCAPE_LEFT,
Titanium.UI.LANDSCAPE_RIGHT
];
Titanium.Gesture.addEventListener('orientationchange', function(e) {
if(e.orientation == Titanium.UI.LANDSCAPE_RIGHT){
catWin.hideNavBar();
} else if(e.orientation == Titanium.UI.LANDSCAPE_LEFT){
catWin.hideNavBar();
} else if(e.orientation == Titanium.UI.PORTRAIT){
catWin.showNavBar();
}
});
Комментарии:
1. Пожалуйста, опубликуйте весь соответствующий код.
Ответ №1:
Вам действительно нужно опубликовать больше кода, например, я понятия не имею, используете ли вы Ti.UI.currentWindow.hideNavBar();
или используете только .hide();
и .show();
?
Из того, что я могу сказать, ваша проблема, однако, возможно, связана с шириной. Пытаюсь установить его на '100%'
вместо использования platformWidth
. Еще раз без всего соответствующего кода, такого как ваше orientationchange
событие, это лучший совет, который я могу дать. Надеюсь, это поможет.
ТРЕТИЙ КОММЕНТАРИЙ: возможно
Titanium.Gesture.addEventListener('orientationchange', function(e) {
if(e.source.isLandscape()){
catWin.hideNavBar();
} else {
catWin.barImage = 'images/barImage.png';
catWin.showNavBar();
}
});
Просто где-то там или на вкладке события. Я бы поиграл с этой идеей и посмотрел, продвинет ли это вас дальше?
Комментарии:
1. спасибо за ваш полезный комментарий! я использую hideNavbar() и showNavbar(). Я обновлю свой вопрос
2. Я пытался установить значение with равным «100%», но это не помогло. Также я не думаю, что изменение ориентации действительно актуально, потому что, если я удалю код изменения ориентации (и hideNavbar / showNavbar), изображение панели навигации все равно растягивается при смене вкладки, а затем возвращается к портретному виду
3. Странный KS github.com/appcelerator/titanium_mobile/blob/master/demos/… с этим тоже есть проблемы. Вы пробовали добавить сброс
barImage
к вашемуorientationchange
событию или событиям вкладкиfocus
? Что-то вродеcatWin.barImage = 'images/barImage.png';
? Я знаю, что оно уже установлено, но вы можете исправить практически любые проблемы с отображением таблицы, просто перезагрузив данные в событиях, поэтому мне интересно,barImage
работает ли это таким же образом…4. Я попытался настроить изображение (снова) на orientationchange или нажать focus, в результате чего барическое изображение исчезло.
5. Я попытался установить гистограмму (agian) на orientationchange и фокус вкладки. оба заканчиваются тем, что барическое изображение исчезает.. Затем я удалил все изменения ориентации / фокусировки табуляции, которые влияли на изображение панели, и обнаружил, что при повторном нажатии на текущую вкладку гистограмма сбрасывается. Теперь мне просто нужно найти способ имитировать щелчок панели вкладок при изменении ориентации, чтобы это сработало!
Ответ №2:
Хотя это не лучшее решение, потому что оно все еще выглядит немного странно (но намного лучше, чем раньше), на данный момент это лучшее решение. Я нашел какое-то решение, используя следующий код:
Я установил гистограмму в коде CreateWindow, чтобы, по крайней мере, в начале все выглядело нормально:
var jbWin = Ti.UI.createWindow({
title: '',
url:'homePage.js',
barImage: 'images/jobbroker_bar.png'
});
Затем при orientationchange я отменяю настройку гистограммы и начинаю использовать изображение заголовка:
Titanium.Gesture.addEventListener('orientationchange', function(e){
if(e.source.isLandscape()){
catWin.titleImage = '';
catWin.barImage = '';
catWin.hideNavBar();
else if( e.orientation != Ti.UI.FACE_UP amp;amp; e.orientation != Ti.UI.FACE_DOWN ) {
catWin.titleImage = 'images/jobbroker_bar.png';
catWin.showNavBar();
}
}
Комментарии:
1. принял мой собственный awnser, поскольку это лучшее решение, и я больше не собираюсь искать лучшее, это занимает слишком много времени..
Ответ №3:
вы пробовали использовать «titleControl» на панели навигации, чтобы установить изображение вместо элемента управления barImage?
также можете ли вы опубликовать небольшой apps.js файл с соответствующим изображением где-нибудь? трудно полностью понять проблему, не запустив проект
Комментарии:
1. Я разместил свое приложение на github: app.js находится здесь: github.com/scubafly/Jobbroker-app/blob/master/Jobbroker /…
2. Также, что вы подразумеваете под «titleControl»?