UISplitViewController 没有正确旋转

Posted

技术标签:

【中文标题】UISplitViewController 没有正确旋转【英文标题】:UISplitViewController is not rotating correctly 【发布时间】:2012-03-08 02:16:33 【问题描述】:

我知道有很多关于堆栈溢出的话题的讨论,但没有一个问题的答案适合我。

我有一个作为根视图控制器加载的 SplitViewController,并且 SVC 内的两个表视图都将 ShouldAutoRotate 设置为返回 YES。

SVC 不会随着 iPad 正确旋转,即使时钟/状态栏可以。


更新

在我的 AppDelegate 中,我注意到 rootViewController 直到我设置它之后才真正设置 - 不应该始终设置 rootViewController 吗? 这段代码:

    MyAppAppDelegate *appDelegate = (MyAppAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSLog(@"RootViewController pre set: %@", appDelegate.window.rootViewController);
    [appDelegate.window setRootViewController:splitViewController];
    NSLog(@"RootViewController post set: %@", appDelegate.window.rootViewController);

日志为:

RootViewController pre set: (null)
RootViewController post set: <UISplitViewController: 0x88ad2d0>

这是否意味着我错误地认为 SVC 是根视图控制器?

另外,在 IB 中 - 窗口没有连接到 rootViewController 出口 - 这是一个问题吗?


这里是以编程方式制作 SVC:

-(IBAction)makeStory:(id)sender
 MakeSentenceTableViewController *detailViewController = [[MakeSentenceTableViewController alloc] initWithNibName:@"MakeSentenceTableViewController" bundle:nil];

    UISplitViewController *splitViewController = [[[UISplitViewController alloc] init] autorelease];

    UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:makeStoryTableViewController]autorelease];

    UINavigationController *detailNav = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];

    splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
    splitViewController.delegate        = makeStoryTableViewController;

    MyAppAppDelegate *appDelegate = (MyAppAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate.window setRootViewController:splitViewController];

这是两个表视图中的 ShouldAutoRotate 部分(它们在两者中是相同的):

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
// Return YES for supported orientations
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)   
    NSLog(@"story idiom for rotate is iPad");
    return YES;

请帮我解决这个问题,以便 SplitViewController 正确加载 - 或者帮助我使用一些技术进行调试(例如,我如何检查 SVC 是否在 rootViewController 中,是否有其他方法可以调试旋转麻烦?) .

【问题讨论】:

【参考方案1】:

啊。提问过程的一部分通常会引导您自己回答问题。

我必须将 IB 中的 MainWindow~ipad.xib 的 rootViewController 出口连接到 AppDelegate 中的 viewController,然后一切都开始工作了。

所以我没有正确地将 UISplitViewController 设置为 rootViewController。

【讨论】:

以上是关于UISplitViewController 没有正确旋转的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController 没有正确旋转

自定义 UISplitViewController?

UISplitViewController - iPad分屏视图控制器

通用应用程序中的 UISplitViewController 子类

UISplitViewController:为啥我不应该在导航或标签栏界面中显示它?

iPad uisplitviewcontroller 左视图变黑