1

我正在为 iPad 制作应用程序。我有一个必须保持在横向的视图控件,这很好用。

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

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

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

1 回答 1

1

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

响应方向更改文档:

窗口寻找合适的视图控制器并调用它的shouldAutorotateToInterfaceOrientation:方法来确定它是否支持新的方向。

容器视图控制器可能会拦截此方法并使用自己的启发式方法来确定是否应发生方向更改。例如,标签栏控制器仅在其所有托管视图控制器都支持新方向时才允许方向更改。

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

View Controller Programming Guide文档(强调我的):

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

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

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

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(yourSelector:)
    name:UIDeviceOrientationDidChangeNotification object:nil];

更新

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

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

于 2012-03-20T13:50:36.457 回答