将UIViewController.view添加到另一个视图会导致方向问题

时间:2010-06-11 15:37:50

标签: ipad uiview uiviewcontroller orientation

简短版本:
我在一个UIViewControllers viewDidLoad方法中分配/初始化/保留一个新的UIViewController,将新视图添加到self.view。这通常有效,但它似乎搞砸了我的iPad应用程序的方向更改处理。

更长的版本
我正在构建一个相当复杂的iPad应用程序,涉及很多视图和视图控制器。在调整到设备方向遇到一些困难后,我做了一个简单的XCode项目来找出问题所在。

首先,我已经阅读了关于这个主题的Apple Docs(一个名为 "Why won't my UIViewController rotate with the device?"的小文档),虽然我确实认为它与其中列出的原因之一有关,但我并不确定如何解决它。

在我的测试项目中,我有一个appDelegate,一个rootViewController和一个带有两个自定义viewControllers的UISplitViewController。我使用rootViewController上的一个按钮切换到splitViewController,从那里我可以使用一个按钮切换回rootViewController。到目前为止,一切都很好,即所有视图都适应设备方向。

但是,在splitViewController的右侧viewController中,我使用viewDidLoad方法初始化其他一些viewControllers,并将它们的视图添加到自己的视图中:

self.newViewController = [[UIViewController new] autorelease];  [newViewController.view setBackgroundColor:[UIColor yellowColor]];  [self.view addSubview:newViewController.view];

这是出问题的地方。不知何故,添加此视图后,调整到设备方向是混乱的。在启动时一切都很好,在我切换到splitViewController之后一切都还不错,但是一旦我切换回rootViewController它就全部结束了。我已经尝试过(差不多)关于保留和释放viewcontroller的所有内容,但似乎没有什么能解决它。

从上面的代码中可以看出,我已将newViewController声明为属性,但如果不这样做,则会发生同样的情况。

我不应该将ViewController的视图添加到我自己的视图中吗?这真的搞砸了我的项目,因为我有很多viewControllers在做各种各样的事情。

对此的任何帮助将不胜感激......

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,通过从父视图中删除IB中的“autoresize子视图”选项解决了接缝问题。
然后选择视图a:Inspector - >属性(第一个标签) - >图。

答案 1 :(得分:0)

我认为发生的事情是你的新视图控制器正在进行自动旋转调用并且可能无法处理它们。与此同时,您的旧视图控制器及其视图将无法获得自动旋转调用,并且会被卡在任何方向。

我说不出来,但我认为你想做的是创建一个UIView并将其添加到旧的viewcontroller中,而不是创建一个UIVIewController并添加它的视图。