我正在申请iPad。 我有一个必须留在风景中的视图控件,这很好用。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}
从这个视图我推向另一个视图,每当用户倾斜他的ipad时,这个子视图应该旋转到适当的旋转(横向或纵向)。 在这个子视图中,我使用此代码来实现此目的,但它不起作用。它坚持景观。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
答案 0 :(得分:1)
为了使视图控制器支持旋转,其层次结构中的所有视图控制器都必须支持旋转。
来自Responding to Orientation Changes文档:
该窗口查找适当的视图控制器并调用其
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
以及视图控制器,以支持旋转处理。