自定义UIViewController子视图不旋转,但superview确实,帮我解决原因?

时间:2010-08-11 10:19:46

标签: cocoa-touch ipad uikit uiviewcontroller autorotate

简单的iPad应用程序。

App加载并显示由UIViewController的子类控制的UITableView。 这可以完美地旋转。

单击表视图中的行会导致创建新的子视图,该子视图也由UIViewController子类控制。 这在纵向上显示良好,但不适应横向,并且不响应设备旋转。

两个视图控制器都包括:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    NSLog(@"Responding to rotation");
    return YES;
}

但是只有原始视图控制器才会响应:

   - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    NSLog(@"View About to rotate");
}

在IB中,我检查了视图是否会自动调整,其中的组件(UIScrollView和一些UILabels)将正确调整。

任何人都可以帮我解决为什么子视图没有响应。?

2 个答案:

答案 0 :(得分:5)

我找到了我朋友的答案......

我正在使用

将子视图添加到视图中
[mainView.view.window addSubview detailView.view];

然而,这是将它添加到窗口而不是视图,因为窗口只将旋转事件传递给一个视图控制器,我将我的子视图放在错误的位置。 相反,我将其更改为......

[mainView.view addSubview detailView.view];

哪个有效! 只需要在旋转时添加用于调整子视图大小的代码即可。

在此查看更多信息:http://developer.apple.com/iphone/library/qa/qa2010/qa1688.html

答案 1 :(得分:0)

不确定,但AFAIK一次只有一个UIViewController处于活动状态(就接收来自UIKit的事件而言)。你的第二个视图控制器是通过-presentModalViewController推送的:动画:?如果没有,您可能需要将-willRotateToInterfaceOrientation:方法(也可能是其他方法)从接收事件的方法代理到另一个方法。