Ipad ориентация не работает хорошо - PullRequest
0 голосов
/ 10 августа 2011

Я создаю приложение с альбомной ориентацией.Для этого я установил свойство Initial interface orientation в файле info.plist.Затем при каждом просмотре я обрабатывал

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {   
    return(interfaceOrientation==UIInterfaceOrientationLandscapeRight);
}

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

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

self.window.rootViewController = self.myNav;

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

Любая помощь будет оценена.

EDIT: Я использовал

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Я никогда не получал эту проблему в симуляторе, нополучать это в устройстве и не каждый раз.Я тоже использовал Supported interface orientations (iPad) и установил Landscape (right home button) значение для item0.

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Вам необходимо установить для свойства "Simulated Metrics> Orientation" вашего вида сверху (во всех файлах xib) значение "Пейзаж". По умолчанию это портрет.

Здесь на этот вопрос довольно хорошо ответили - Пейзажный режим ТОЛЬКО для iPhone или iPad .

У меня также есть приложение, которое, как и ваше, поддерживает только UIInterfaceOrientationLandscapeRight. До сих пор я не сталкивался с проблемами ориентации. У меня только один UIViewController под окном. Этот UIViewController имеет свой собственный UITabBar, который я использую для смены страниц. Итак, мы меняем страницы по-разному. Я установил свой UIViewController, используя свойство окна rootViewController, как и вы, но опять же у меня есть только один.

Кроме того, мне никогда не приходилось делать ничего похожего на вызов [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications], который вы включили. Поскольку вы поддерживаете только ориентацию LandscapeRight, вам не нужно получать уведомления об изменениях.

EDIT

Я создал пример проекта, который я могу опубликовать в случае необходимости, и я думаю, что, возможно, знаю вашу проблему. Во-первых, вы сталкиваетесь только с проблемой размеров в поповерах? Если так, то я не думаю, что ориентация сбивает вас с толку, а сам поповер. Мой пример проекта имеет 3 контроллера представления. Первый загружает второй, изменяя rootViewController окна. Это работало нормально. У второго контроллера представления есть кнопка, чтобы открыть поповер. Это будет отображаться неправильно, если вы не установите contentSizeForPopover на контроллере представления, как показано ниже:

- (IBAction) showVC3InPopover
{
    UIViewController * vc3 = [[VC3 alloc] init];
    /** Set the contentSizeForViewInPopover property to determine how 
        large the view will be in the popover!  You can do this in the 
        init method(s) of the view controller if you prefer, it's just 
        easy to do here */
    vc3.contentSizeForViewInPopover = vc3.view.frame.size;
    [_popover release], _popover = nil;
    _popover = [[UIPopoverController alloc] initWithContentViewController:vc3];
    [vc3 release];

    [_popover presentPopoverFromRect:_showPopoverButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

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

1 голос
/ 10 августа 2011

Сколько просмотров (или viewControllers) у вас есть?Возможно, вам придется реализовать эту логику ориентации во всех этих представлениях ??

...