从UINavigationController切换到UISplitViewController后,帧大小/方向不正确

时间:2010-09-26 10:04:37

标签: iphone orientation ipad

我正在尝试在我的应用程序中仅使用一个UISplitViewController(其他人使用导航控制器和不同的ViewControllers)。

我在MainWindow.xib中添加了SplitViewController(这是我可以使它工作的唯一方法)但是当调用didFinishLaunchingWithOptions时我不会将它添加到窗口中,因为它通常是这种情况,因此SplitViewController保持隐藏状态。

当我点击选项卡时,我会在委托窗口中调用一些代码来隐藏导航控制器并将SplitViewController放在适当位置:

[window addSubview:splitViewController.view];

如果iPad处于横向模式,SplitViewController仍然认为它出于某种原因处于纵向模式,并且根和细节视图控制器的框架错误。如果我开始旋转iPad,那么一切正常。这只是最初的错误调用。

看起来SplitViewController没有得到初始横向旋转的通知,因为它是隐藏的。

在第一次调用期间,根控制器的帧矩为320 x 980,如果iPad旋转为纵向,然后返回横向模式,则框架矩形变为320 x 724。

错误大小的问题是它不会在根控制器中显示TableView中的最后一项。

我试图在根控制器的ViewDidLoad和ViewWillAppear中更改帧大小,但它没有改变任何内容。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

奇怪,在viewDidLoad方法中修复detailViewController的大小解决了这个问题。

self.view.frame = CGRectMake(321, 0, 703, 699);

我有完全相同的配置:一个tabBarController作为rootController,有一个splitViewController和几个viewControllers。

答案 1 :(得分:0)

也许这可以帮到你一点。

我有一个iPad应用程序,其标签栏包含多个标签/页面。其中一个页面使用分割视图控制器,左视图还包含导航控制器。轮换方面似乎工作正常。以下是我如何设置它:

的AppDelegate

MyLeftViewController *viewController = [[MyLeftViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[viewController release];

MyRightViewController *rightView = [[MyRightViewController alloc] init];

UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:navController, rightView, nil];

[rightView release];   
[navController release];

splitViewController.delegate = rightView;
[viewControllersArray addObject:splitViewController];    
[splitViewController release];

...add other view controllers to viewControllersArray...

tabBarController.viewControllers = viewControllersArray;
[viewControllersArray release];
[window addSubview:tabBarController.view];