iPad上的iOS 5 UISplitViewController没有';在肖像上不显示MasterView(但仅最初显示)
我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,具有多个细节控制器,这些控制器根据在主控台上选择的内容进行更改。My DetailViewController具有以下行,允许主视图持续显示(或应该显示): 我的问题是:如果在点击“设置”选项卡时键盘是纵向的,则只显示初始细节视图。不是主人。将平板旋转到横向和背面,主屏幕显示良好,并保持不变 我不明白为什么会这样。XCode 4.5.2主/细节模板项目在我更新了detailController以不隐藏主模板之后没有这个问题iPad上的iOS 5 UISplitViewController没有';在肖像上不显示MasterView(但仅最初显示),ipad,ios5,ios-simulator,Ipad,Ios5,Ios Simulator,我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,具有多个细节控制器,这些控制器根据在主控台上选择的内容进行更改。My DetailViewController具有以下行,允许主视图持续显示(或应该显示): 我的问题是:如果在点击“设置”选项卡时键盘是纵向的,则只显示初始细节视图。不是主人。将平板旋转到横向和背面,主屏幕显示良好,并保持不变 我不明白为什么会这样。XCode 4.5.2主/细节模板项目在我更新
有什么想法吗?我也遇到了同样的问题,但通过反复检查我的UISplitViewController委托是否在适当的时间设置,我才解决了这个问题 请注意在XCode示例项目的AppDelegate中所做的操作,在这里它可以正常工作:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
}
return YES;
}
它专门将UISplitViewController委托设置为特定的视图控制器
出于我的目的,我将AppDelegate设置为SplitViewControllerDelegate,因为SplitViewController中有一些稍微复杂的viewcontroller管理
因此,请确保在application:didFinishLaunchingWithOptions:中正确设置了委托,并且您应该不会遇到任何问题 要解决这个问题,我必须使用与原始问题相同的代码,但将其放入子类UISplitViewController中。最初,我将其放在详细视图中。我找到的解决此问题的简单方法是确保AppDelegate具有方向代理:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
我知道为时已晚,但我想展示一下我是如何从中解脱出来的,这样其他人才能从中受益
- (IBAction)hideMaster
{
// 1. set desired width for master view
[self.splitViewController setValue:[NSNumber numberWithFloat:0.0] forKey:@"_masterColumnWidth"];
// 2. splitViewController delegate to self
self.splitViewController.delegate = self;
// 3. give a smooth animation
[UIView animateWithDuration:1.0 animations:^{
[self.splitViewController.view layoutSubviews];
}];
}
- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
{
return NO;
}
在使用不同的应用程序时,我找到了答案。请看下面。今天我在尝试更新的一些非常旧的代码中看到了同样的情况。我必须确保在将视图控制器添加到拆分视图之前设置了委托(正如我所说,这是旧代码)。一旦我这么做了,效果很好。你太棒了,你应该知道这一点。非常感谢你!
- (IBAction)hideMaster
{
// 1. set desired width for master view
[self.splitViewController setValue:[NSNumber numberWithFloat:0.0] forKey:@"_masterColumnWidth"];
// 2. splitViewController delegate to self
self.splitViewController.delegate = self;
// 3. give a smooth animation
[UIView animateWithDuration:1.0 animations:^{
[self.splitViewController.view layoutSubviews];
}];
}
- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
{
return NO;
}