iPad上的iOS 5 UISplitViewController不会在Portrait上显示MasterView(但最初只显示)

时间:2012-11-20 15:13:28

标签: ipad ios5 ios-simulator

我有一个UITabBarController应用程序,其中一个选项卡显示应用程序设置。这是一个UISplitViewController,它有多个细节控制器,根据master上选择的内容进行更改。我的detailViewControllers有这些行,允许主视图不断显示(或应该):

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.splitViewController.delegate = self;
}

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

这是我的问题:如果在点击设置选项卡时垫是纵向的,则只显示初始详细视图。不是主人。将垫子旋转到横向和背面,主人表现得很好并且留在那里。

我无法弄清楚为什么会这样。更新detailController后,XCode 4.5.2主/详细模板项目没有出现此问题。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,但通过仔细检查我的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管理。

因此,请确保代理在应用程序中正确设置:didFinishLaunchingWithOptions:您应该没有问题。

答案 1 :(得分:1)

要解决这个问题,我必须使用原始问题中使用的相同代码,但将其放入子类UISplitViewController中。最初我把它放在详细视图中。

答案 2 :(得分:0)

我发现这个问题的简单方法是确保AppDelegate具有方向委托:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

答案 3 :(得分:0)

我知道现在为时已晚,但我想表明我是如何摆脱这种情况所以其他人可以从中受益。

- (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;
}