UISplitViewController仅在纵向视图中获取细节VC



我最近从应用程序中删除了选项卡栏,取而代之的是我自己编写的"滑出"风格的菜单。它似乎工作得很好,只是我在应用程序中使用的一个分视图控制器在iPad上的纵向方向不能正常工作(横向方向也可以)。我看到的问题是VCONLY被加载到纵向视图中的细节,其中两个VC都在横向视图中正确加载。这是在iOS7上。

这是我正在使用的代码。此代码已从AppDelegate(以前)移到根VC。有一些更改,但相对较小。它确实在选项卡栏上工作得很好,但使用这个新的滑出菜单(即表格视图)我有一个问题。我只包括代码中我认为相关的部分。

AdminMasterViewController *adminMasterVC = [[AdminMasterViewController alloc] init];
UINavigationController *adminMasterNav = [[UINavigationController alloc] init];
adminMasterNav.viewControllers = [NSArray arrayWithObjects:adminMasterVC, nil];
adminMasterNav.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);
AdminDetailViewController *adminDetailVC = [[AdminDetailViewController alloc] init];
UINavigationController *adminDetailNav = [[UINavigationController alloc] init];
adminDetailNav.viewControllers = [NSArray arrayWithObjects:adminDetailVC, nil];
adminDetailNav.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);
UISplitViewController *adminSplitVC = [[UISplitViewController alloc] init];
adminSplitVC.viewControllers = [NSArray arrayWithObjects: adminMasterNav, adminDetailNav, nil];
adminSplitVC.delegate = self;
adminSplitVC.title = @"Admin";
adminSplitVC.view.frame = CGRectMake(0,0,[Utility screenWidth],[Utility screenHeight]);
vcArray = [NSArray arrayWithObjects:homeVC, adminSplitVC, expressiveNav, receptiveNav, typerNav, nil];

(最后一行构建了项目中所有VC的数组;创建这些VC的代码已被省略)。

选择VC后,它作为子VC显示如下:

UIViewController *vc;
if ([selected isEqualToString:@"Home"])
{
    vc = [vcArray objectAtIndex:VCHome];
}
else if ([selected isEqualToString:@"Administrator"])
{
    vc = [vcArray objectAtIndex:VCAdmin];
}
... (others listed here)
[self.view addSubview:vc.view];
[self addChildViewController:vc];
[vc didMoveToParentViewController:self];

根据我所读到的,不使用标签栏可能会有一些问题,但这些文章令人困惑,因为其中很多都是过时的。我将感谢任何关于这个问题的意见或建议,因为我已经阅读了我能找到的所有内容,真的不知道该从这里走到哪里。TIA。

经过几天的阅读和尝试,在发布问题一个小时后,我解决了这个问题。万一其他人遇到同样的问题,这里有解决方案:

我对UISplitViewController进行了子类化,并使其成为自己的委托。

然后,这个委托方法解决了这个问题:

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
    return NO;
}

最新更新