Автотота игнорируется при смене вкладок - PullRequest
0 голосов
/ 14 марта 2011

У меня есть приложение с UITabBarController, к каждой вкладке прикреплен UINavigationController. Теперь давайте предположим, что rootViewControllers (из navigationControllers) на вкладках 1, 2 и 4 поддерживают только книжную ориентацию и имеют такую ​​реализацию «shouldAutorotateToInterfaceOrientation», которая возвращает YES только при запросе поворота в книжную ориентацию. Однако на вкладке 3 есть некоторые viewControllers в своем навигационном контроллере, которые поддерживают альбомную ориентацию.

Когда я сейчас нахожусь на вкладке 3 и перехожу к одному из контроллеров view, которые поддерживают альбомную ориентацию, я могу повернуть устройство, и интерфейс изменится на альбомную. Тем не менее, если я нажму на вкладке 1, 2 или 4 с интерфейсом в альбомном режиме, интерфейс не будет изменен на портретный, а останется в горизонтальном, несмотря на тот факт, что отображаемые контроллеры представления явно поддерживают только книжный.

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

Спасибо!

1 Ответ

1 голос
/ 14 марта 2011

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

Я закончил тем, что создал категорию для UITabBarController (поскольку он не должен быть разделен на подклассы) для метода shouldAutorotate ...

@implementation UITabBarController (orientation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
#if DEBUG 
    NSLog(@"UITabBarController (orientation) -> shouldAutorotateToInterfaceOrientation: [%d]",toInterfaceOrientation);
#endif  
    //if(toInterfaceOrientation == UIInterfaceOrientationPortrait) return YES;
//  else return [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    if (self.selectedViewController == [self.viewControllers objectAtIndex:kLibraryStoreTabIndex])
        return NO;


    if( self.selectedViewController == [self.viewControllers objectAtIndex:kContactTabIndex]){

        return YES;
    }
// rest of the conditions depending of the tab 

return NO; //last option 
}
...