我正在iOS上开发一个应用程序,它显示一个UISplitViewController。在纵向模式中,显示/隐藏主视图控制器(MenuPrincipalVC)的按钮如下:


然而,当我旋转视图控制器时,无论菜单是否隐藏在纵向视图中,它总是可见的

我希望主视图在两个方向(景观和纵向)上具有相同的行为,我希望主视图(MenuPrincipalVC)被隐藏,并在顶部设置一个按钮来显示/hidding主视图控制器,这是我的代码:
这是为了创建SplitView并显示它,masterViewController总是MenuPrincipalVC,但是detailView依赖于rightViewController:
#pragma mark *** UISplitViewController methods ***
-(void)showSplitViewControllerInView:(UIView *)view
withDetailViewController:(id)rightViewController{
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPad" bundle: nil];
UINavigationController *leftNavController;
UINavigationController *rightNavController;
MenuPrincipalVC *leftViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"MenuPrincipalVC"];
leftViewController.title = @" ";
leftNavController = [[UINavigationController alloc] initWithRootViewController:leftViewController];
rightNavController = [[UINavigationController alloc] initWithRootViewController:rightViewController];
leftNavController.toolbarHidden = FALSE;
rightNavController.toolbarHidden = FALSE;
leftNavController.navigationBar.translucent = TRUE;
rightNavController.navigationBar.translucent = TRUE;
leftNavController.toolbar.translucent = FALSE;
rightNavController.toolbar.translucent = TRUE;
UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];
splitViewController.delegate = rightViewController;
if ([splitViewController respondsToSelector:@selector(setPresentsWithGesture:)]) {
[splitViewController setPresentsWithGesture:NO];
}
view.window.rootViewController = splitViewController;
}
#pragma -在我的rightViewController上,我设置了以下方法:
#pragma mark - UISplitViewDelegate methods
-(void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc{
//Grab a reference to the popover
self.popover = pc;
barButtonItem.title = [NSString fontAwesomeIconStringForEnum:FABars];
NSDictionary *textAttributes = @{NSFontAttributeName : [UIFont fontWithName:kFontAwesomeFamilyName
size:TOOLBAR_ICONS_SIZE],
NSForegroundColorAttributeName : [UIColor whiteColor]};
[barButtonItem setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
UINavigationItem *navItem = self.navigationItem;
[navItem setLeftBarButtonItem:barButtonItem animated:YES];
}
-(void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{
//Remove the barButtonItem.
[_navBarItem setLeftBarButtonItem:nil animated:YES];
//Nil out the pointer to the popover.
_popover = nil;
}
#pragma mark -谢谢你的支持
发布于 2014-04-11 18:47:19
我所要做的就是将下一行代码添加到详细的视图控制器中:
-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation{
return YES;
}发布于 2016-04-23 19:21:53
另一种解决方案可能只是专门设置主视图控制器的宽度(当然,表示控制器总是可以替代行为古怪和难以使用的分割视图方法)。
https://stackoverflow.com/questions/22994883
复制相似问题