2015-01-14 25 views
1

我在iOS 8中有一个自定义UISplitViewController子类。在横向上,我希望主VC和次VC的默认行为可见(),但当我旋转到肖像我想主要的VC显示在默认弹出窗口(preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay)。在分割视图旋转时手动设置preferredDisplayMode时,主视图控制器内容会消失

通过在子类上实现-viewWillTransitionToSize:我可以得到这个工作,但旋转了几次后,主VC消失并且不会再出现,直到我点击分割视图的酒吧按钮项。

第一对旋转中的旋转动画完成块中的日志显示首选显示模式与实际显示模式相同,但在旋转几圈之后,实际显示模式在横向上被锁定为UISplitViewControllerDisplayModePrimaryOverlay,即使在首选的显示模式是UISplitViewControllerDisplayModeAllVisible

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    if (self.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
     BOOL isPortrait = size.height > size.width; 

     if (isPortrait) { 
      self.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay; 
     } 
     else { 
      self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 
     } 

     [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
      self.dividerView.hidden = isPortrait; 
     } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
      NSLog(@"Preferred display mode: %ld | Actual display mode: %ld", self.preferredDisplayMode, self.displayMode); 
     }]; 
    } 
} 
+0

UPDATE:旋转到横向时改变preferredDisplayMode到'UISplitViewControllerDisplayModeAutomatic'修复它,但是当在肖像,如果我点击屏幕上驳回酥料饼,然后旋转回景观,主VC含量消失。 –

回答

2

感谢https://devforums.apple.com/message/1024928#1024928我明白了。

在动画协调器的完成块中,将preferredDisplayMode设置为UISplitViewControllerDisplayModeAutomatic使其工作。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    if (self.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
     BOOL isPortrait = size.height > size.width; 

     if (isPortrait) { 
      self.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay; 
     } 

     [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
      if (isPortrait) { 
       self.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryOverlay; 
      } 
      self.dividerView.hidden = isPortrait; 
     } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
      // ADD THIS TO THE COMPLETION BLOCK 
      self.preferredDisplayMode = UISplitViewControllerDisplayModeAutomatic; 

      NSLog(@"Preferred display mode: %ld | Actual display mode: %ld", self.preferredDisplayMode, self.displayMode); 
     }]; 
    } 
} 
+0

这工作!天才... –

相关问题