子视图不会从横向旋转到纵向,反之亦然



我正在为iPad制作一个应用程序。我有一个视图控件,它必须保持在风景中,这很好用。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{
   return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

从这个视图我推到另一个视图,每当用户倾斜他的ipad时,这个子视图应该旋转到适当的旋转(横向或纵向)。在这个child视图中,我使用这些代码来实现这一点,但它不起作用。它紧贴着风景。

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

为了使视图控制器支持旋转,其层次结构中的所有视图控制器都必须支持旋转。

来自方向变更响应文档:

该窗口查找适当的视图控制器,并调用其shouldAutorotateToInterfaceOrientation:方法来确定是否支持新方向。

容器视图控制器可以拦截该方法,并使用它们自己的启发法来确定是否应该发生方向改变。例如,只有当选项卡栏控制器的所有托管视图控制器都支持新方向时,选项卡栏控制器才允许更改方向。

此外,您不应该使用多个视图控制器来管理单个屏幕。

从视图控制器编程指南文档(重点是我的):

视图控制器与其视图层次结构中的视图之间的一一对应关系是关键的设计考虑因素不应使用多个内容视图控制器来管理同一视图层次结构的不同部分同样,您不应该使用单个内容视图控制器对象来管理多个屏幕的内容。

在这种情况下,我建议禁用父视图控制器中的旋转处理,将子视图控制器更改为简单的视图(以满足上述条件),并手动监视方向更改以更新子视图的布局。

您可以通过监听UIDeviceOrientationDidChangeNotification通知来监控方向的变化。示例代码:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(yourSelector:)
    name:UIDeviceOrientationDidChangeNotification object:nil];

更新

如果你所说的"推"是指将视图控制器推到导航视图控制器上,那么请忽略我回复的第二部分。

如果是这种情况,则必须确保已覆盖导航控制器的shouldAutorotateToInterfaceOrientation:方法以返回YES和视图控制器,以便支持旋转处理。

最新更新