appcelerator ориентация изменить изображение панели навигации скрыть / показать - PullRequest
0 голосов
/ 19 мая 2011

Я создаю приложение с несколькими вкладками для iPhone. перефразировал вопрос на сайте appcelerator здесь

Когда я перехожу из портретного в ландшафтный режим, я хочу скрыть панель навигации.

работает нормально, если я не переключаюсь на другую вкладку. Но когда я смотрю 1 вкладку в портретной, переключиться на другую вкладку, перейти в альбомную ориентацию, переключиться обратно на первую вкладку, а затем перейти на задний портрет все навигационные панели (window.barImage) растянуты (до размеров ландшафтного навигационного меню)

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

Я попытался установить barImage снова при смене ориентации, но это тоже не помогает.

примечание к сайту: я использую одно и то же изображение на каждой вкладке для navBar, может ли это быть проблемой? portrait view of the app showing my problem

Я выделил зеленым изображение панели навигации, синяя часть - это то место, где обычно должно быть изображение.

Также обратите внимание, что изображение имеет правильный размер для книжной ориентации панели навигации.

код:

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();
    }
});

Ответы [ 3 ]

1 голос
/ 20 мая 2011

Вам действительно нужно опубликовать больше кода, например, я понятия не имею, используете ли вы 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();
    }
});

Просто где-то там или на вкладке события. Я бы поэкспериментировал с этой идеей и посмотрел, получит ли она вас дальше?

0 голосов
/ 30 мая 2011

Вы пытались использовать «titleControl» на панели навигации, чтобы установить изображение вместо элемента управления barImage?

также вы можете опубликовать небольшой файл apps.js с соответствующим изображением где-нибудь? трудно полностью понять проблему без запуска проекта

0 голосов
/ 30 мая 2011

Хотя это не лучшее решение, потому что оно выглядит немного странным (но намного лучше, чем раньше), это лучшее решение до сих пор. Я нашел какое-то решение, используя следующий код:

Я установил barImage в коде createWindow, чтобы, по крайней мере, в начале все выглядело нормально:

var jbWin = Ti.UI.createWindow({
    title: '',
    url:'homePage.js',
    barImage: 'images/jobbroker_bar.png'
});

Затем при смене ориентации я сбрасываю barImage и начинаю использовать titleImage:

Titanium.Gesture.addEventListener('orientationchange', function(e){
   if(e.source.isLandscape()){
      catWin.titleImage = '';
      catWin.barImage = '';
      catWin.hideNavBar();
   else if( e.orientation != Ti.UI.FACE_UP && e.orientation != Ti.UI.FACE_DOWN ) {
      catWin.titleImage = 'images/jobbroker_bar.png';
      catWin.showNavBar();
   }
}
...