willRotateToInterfaceOrientation不是从提出所谓的ViewContro

2019-07-17 20:59发布

的UIViewController与此配置的iPad:

shouldAutorotate (true) supportedInterfaceOrientations (UIInterfaceOrientationMaskAll)和内willRotateToInterfaceOrientation我进行一些技巧来调整我的接口。

从这个控制器的一个孩子,我展示这个-poor-代码QuickLookController。

[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:previewController animated:YES completion:nil];

但是,如果我转动我的iPad的方法willRotateToInterfaceOrientation没有被调用,所以我不能做的伎俩来调整界面。

有人可以解释我或者给我一些建议? 谢谢

Answer 1:

原因:可能有很多的可能性这一问题。

1)如果您的视图的viewController是一个subView的一些其他的rootViewController是不是一个navigationController ,则可能是旋转呼叫不会传播到子视图的控制器机会。

2)我曾读到,如果Super方法不正确调用需要的地方,那么它可能是旋转问题的原因,这意味着,鉴于堆叠中的所有ViewControllers这是关系到自转必须调用super的方法实现方法(即调用[super viewDidLoad]从视图控制器的viewDidLoad )。

您可以使用以下技巧来处理方向的变化。

注册在viewWillAppear中一个通知。

-(void)viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)  name:UIDeviceOrientationDidChangeNotification  object:nil];}

取向的变化将通知如下功能。

- (void)orientationChanged:(NSNotification *)notification{
[self handleOrientation:[[UIApplication sharedApplication] statusBarOrientation]];}

这将调用下面的方法,你可以处理的方向变化。

   - (void) handleOrientation:(UIInterfaceOrientation) orientation {

        if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
        { 
            //handle the portrait view    
        }
        else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) 
        {
            //handle the landscape view 
        }
     }


Answer 2:

我发现苹果文档的一段:

如果当发生旋转时您的视图控制器的内容不在屏幕上的话,就不会看到旋转的邮件列表。 例如,考虑事件的顺序如下:

  • 您的视图控制器呈现出另一种视图控制器的内容全屏显示。
  • 用户旋转装置,使得所述用户界面取向变化。
  • 您的应用程序驳回呈现视图控制器。

在这个例子中,呈现视图控制器是不可见的旋转时有发生,因此它不会收到任何旋转事件。 相反,当它再次出现,其观点是简单地调整尺寸并使用正常视图布局处理定位。 如果你的布局代码需要知道设备的当前方位,它可以读取应用程序对象的statusBarOrientation属性来确定当前的方位。

那说什么是我的问题,所以我里面添加一些逻辑 - (空)viewWillAppear中:动画,如果事情在正确的地方is'n调整我的布局(BOOL)。



Answer 3:

确保您的视图控制器添加为根视图控制器的一个孩子,然后将消息传递下去。

[rootViewController addChildViewController:viewController];


文章来源: willRotateToInterfaceOrientation not being called from presented viewcontroller