2011-03-14 2 views
0

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

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

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

Спасибо!

ответ

1

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

Я в конечном итоге создать категорию для 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 
} 
+0

Хм я просто сделал некоторые испытания и мой метод shouldAutorotateToInterfaceOrientation в категории не вызывается при переключении вкладок без поворота устройства (что имеет смысл). Вы его ручно называете? – Robin

+0

Нет, я сам не называл это. – Pacu