【问题标题】:Orientation changes when pop back to the initial viewcontroller using UINavigationController iOS 6使用 UINavigationController iOS 6 弹回初始视图控制器时方向更改
【发布时间】:2013-11-06 12:50:44
【问题描述】:

我有一个导航控制器,其中根视图控制器即横向和纵向都支持 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;
}

我也继承了根导航栏。

【问题讨论】:

    标签: ios iphone objective-c


    【解决方案1】:

    实际上,这被确定为 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;
    

    【讨论】:

    • 感谢@Raon 的回复。我想我没有清楚地解释我的问题,抱歉。 VC1 应该支持两个方向,而 VC2 应该只支持纵向,当我在横向模式下转到 VC2 时,在从 VC2 中选择横向模式后,它只会以纵向模式显示其视图。 VC1 视图应为横向,但当前未发生。由于 VC2 不支持横向,当我来来去去时,VC1 视图也被旋转为纵向。请建议
    • @user2960314 所以你说你需要相同的方向,即VC1可能是横向/纵向>> VC2(纵向)>> VC1(横向或纵向)所以如果VC1在它之前是纵向的当它在 VC2 之后重新出现时应该返回到纵向,如果 Vc2 是横向的,它应该保持横向..
    • @Raon.. 这是非常不正常的测试方式。当我将设备从 VC1 保持为横向并推送另一个仅支持纵向的视图 VC2 时,我发现了这个问题,因此它仅以纵向加载其视图(请注意,设备仍处于横向),现在选择 VC2 上的 VC1支持这两种方向已将其视图更改为纵向,即使设备仍处于横向状态。问题出在 VC1 中,当我回来时它应该是横向的,但不是。
    • @user2960314 这是 6.0 的问题吗?还是其他任何有同样问题的?
    • 不确定@Raon 所以只有我在这里发帖。这样如果其他人有同样的问题。
    猜你喜欢
    • 2012-12-13
    • 2011-12-23
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多