Вам необходимо установить для свойства "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 игнорирует размер представления в загружаемом контроллере.