0

我有一个导航控制器,其中根视图控制器即 VC1 支持横向和纵向。当我在横向推动另一个视图控制器时,即。VC2只支持纵向模式,回到VC1,视图会变成纵向。但我仍然处于横向模式。请帮助我解决 iOS 6 问题。

请检查以下代码。

MyViewController1 *theController =[[MyViewController1 alloc] init];
UINavigationController *navCntlr = [[UINavigationController alloc]      initWithRootViewController:theController];
[self.navigationController presentViewController:navCntlr animated:YES completion:nil];           [theController release];
[navCntlr release];

在 MyViewController1

-(BOOL)shouldAutorotate
{
    return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
    return  UIInterfaceOrientationMaskAllButUpsideDown;
}

在 VC2/MyViewController2 我添加了下面的代码。

-(BOOL)shouldAutorotate
{
    return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
    return  UIInterfaceOrientationMaskPortrait;
}

我也对根导航栏进行了子类化。

4

1 回答 1

2

实际上,这被确定为 IOS6 中的一个错误,它发生在 ImageViewController 上,它只支持纵向方向......所以我花了很多时间并找到了一种解决方法......

希望这会有所帮助,所以首先...

在 AppDelegate.h 中添加一个属性

@property BOOL model;

然后在 AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    self.model=NO;

    return YES;
}

也在 AppDelegate.m 中添加这个方法

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{

    if(!self.model)
        return  UIInterfaceOrientationMaskLandscape; //or needed orientation
    else

        return UIInterfaceOrientationMaskAllButUpsideDown;


}

然后在您的视图控制器中呈现 VC2

实现此代码...

AppDelegate *appdelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate];
            appdelegate.model=YES;

然后你只需更改 VC2 的 viewWillDisappear 中的值

AppDelegate *appdelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate];
            appdelegate.model=NO;
于 2013-11-06T13:03:12.617 回答