iPad上的iOS 5 UISplitViewController没有';在肖像上不显示MasterView(但仅最初显示)

iPad上的iOS 5 UISplitViewController没有';在肖像上不显示MasterView(但仅最初显示),ipad,ios5,ios-simulator,Ipad,Ios5,Ios Simulator,我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,具有多个细节控制器,这些控制器根据在主控台上选择的内容进行更改。My DetailViewController具有以下行,允许主视图持续显示(或应该显示): 我的问题是:如果在点击“设置”选项卡时键盘是纵向的,则只显示初始细节视图。不是主人。将平板旋转到横向和背面,主屏幕显示良好,并保持不变 我不明白为什么会这样。XCode 4.5.2主/细节模板项目在我更新

我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,具有多个细节控制器,这些控制器根据在主控台上选择的内容进行更改。My DetailViewController具有以下行,允许主视图持续显示(或应该显示):

我的问题是:如果在点击“设置”选项卡时键盘是纵向的,则只显示初始细节视图。不是主人。将平板旋转到横向和背面,主屏幕显示良好,并保持不变

我不明白为什么会这样。XCode 4.5.2主/细节模板项目在我更新了detailController以不隐藏主模板之后没有这个问题


有什么想法吗?

我也遇到了同样的问题,但通过反复检查我的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;
}