iOS方向更新问题

时间:2014-04-16 11:26:16

标签: ios orientation uiinterfaceorientation

我有一个问题,我的第一个视图控制器固定为纵向。但第二个视图控制器可以是纵向或横向。但是,如果我在第一个视图中并将手机保持在横向状态,请转到下一个视图。屏幕无法更新其方向,但我手动在导航栏上放置项目的代码确实检测到它在横向上。

所以我必须重新旋转设备才能让iOS意识到它已经改变了。

有什么想法吗?!

4 个答案:

答案 0 :(得分:1)

支持方向的视图控制器中的

添加这些方法

-(BOOL)shouldAutorotate{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations{
    return (UIInterfaceOrientationMaskAll);
}

和appdelegate

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;

    if(self.window.rootViewController){
        UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presentedViewController supportedInterfaceOrientations];
    }

    return orientations;
}

答案 1 :(得分:0)

您可以强制将First UIViewController旋转为纵向

#import <objc/message.h>
-(void)viewDidAppear:(BOOL)animated{              

objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), UIInterfaceOrientationPortrait );

  }

答案 2 :(得分:0)

您可以使用[[UIDevice currentDevice] orientation]。 您还可以使用UIDevice实例来检测设备特征的变化,例如物理方向。

您可以在第一个视图控制器中检测到物理方向是横向的,然后强制第二个视图控制器以横向模式加载。

答案 3 :(得分:0)

您可以在viewWillAppear中尝试此操作

if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}

如果ViewController以纵向方式加载并且设备处于横向状态,则它将转变为横向。

或者你可以展示一个被迫处于风景中的模态,并立即将其移除,这也会造成麻烦。

[self presentViewController:PortraitVc animated:NO completion:^{
    [PortraitVc dismissViewControllerAnimated:NO completion:nil];
}];