Najpierw trzeba utworzyć kategorię:
UINavigationController + Rotation_IOS6.h
#import <UIKit/UIKit.h>
@interface UINavigationController (Rotation_IOS6)
@end
UINavigationController + Rotation_IOS6.m:
#import "UINavigationController+Rotation_IOS6.h"
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
@end
Następnie należy wdrożyć te metody w swojej klasie, które mają być tylko krajobraz:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
W przypadku używasz UITabBarController, po prostu zastąpić UINavigationController dla UITabBarController. To rozwiązanie sprawdziło się po długich poszukiwaniach! Byłem w takiej samej sytuacji jak teraz!
EDIT
Tak, widziałem swoją próbkę. Musisz wprowadzić pewne zmiany. 1 - Utwórz nową klasę dla kategorii UINavigationController. Nazwij klasę UINavigationController + Rotation_IOS6 (.h i .m) 2 - Nie musisz implementować metody preferredInterfaceOrientationForPresentation
. Twoja kategoria powinna wyglądać następująco:
#import "UINavigationController+Rotation_IOS6.h"
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
@end
3 - W klasie chcesz obracać tylko w krajobrazie, to ten w realizacji, dokładnie tak:
// Rotation methods for iOS 6
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
4 - radziłbym także metodę autorotacji dla iOS 5 wewnątrz klasy chcesz w krajobrazie:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}
Potwierdzony, działa! – Chris
+1: Musiałem "wymusić" orientację kontrolera viewcontroller, zanim się pojawił, a to wystarczyło. Chciałbym znać "oficjalną" metodę wymuszania orientacji, ale dopóki to zrobię, użyję tej metody. – brainjam
Jeśli zamierzasz wywoływać widok więcej niż jeden raz, sugeruję dodanie tych linii do viewWillAppear. – ChavirA