如何在IOS8中隐藏UISplitViewcontroller的masterView

Wen*_* Hu 6 objective-c ipad uisplitviewcontroller ios8

所有,

我在IOS8 for iPad中遇到了新的UISplitViewcontroller问题.我在detailViewcontroller的storyboard中有一个UITableView,在单击单元格时,我应该转到另一个名为"detailinfo"的视图.我目前正在使用"show"segue.

然而,目前的segue只是推动了正确的部分.我想它显示全屏,但我不知道如何制作它,我尝试使用splitViewController的preferredDisplayMode属性,结果是它只是隐藏主视图但没有调整detailView的大小.我不想用礼物作为模态.

目前我正在做的方式是

        - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier]isEqualToString:@"showStudentDetail"]){

        if(self.traitCollection.horizontalSizeClass != UIUserInterfaceSizeClassCompact){
            UISplitViewController *splitViewController = (UISplitViewController *)self.navigationController.parentViewController;
            splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

并在viewDidAppear中使用

- (void)viewDidAppear:(BOOL)animated {

    if(self.traitCollection.horizontalSizeClass != UIUserInterfaceSizeClassCompact){
        UISplitViewController *splitViewController = (UISplitViewController *)self.navigationController.parentViewController;
        splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAutomatic;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将工作,但masterViewController将"跳出"具有非常糟糕的视觉效果.希望可以得到任何帮助,谢谢

vor*_*max 4

UISplitViewController是一个复杂的视图控制器,由两个子视图控制器组成。因此,当您使用添加到任何子视图控制器的某些 Segue 时,您会要求子视图控制器执行 Segue。这个子视图控制器对活动窗口有部分控制。

在您的情况下,您需要要求分割视图控制器执行segue。因此,您应该将 Segue 添加到处理活动窗口的分割视图控制器中。这样您将拥有全屏选项。

更新

如果您不想使用当前作为模态并希望避免“跳出”效果,您可以使用动画隐藏母版

UISplitViewController *splitViewController = [self splitViewController];
[UIView animateWithDuration:0.25 animations:^{
    splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
} completion:^(BOOL finished) {
    [splitViewController showDetailViewController:vc sender:nil];
}];
Run Code Online (Sandbox Code Playgroud)