изменение ориентации appcelerator на панели навигации скрыть / показать изображение

#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»?