【问题标题】:The child view does not rotate from landscape to portrait and vice versa子视图不会从横向旋转到纵向,反之亦然
【发布时间】:2012-04-04 17:28:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: objective-c view rotation landscape-portrait


    【解决方案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 以及您的视图控制器,以支持旋转处理。

    【讨论】:

    • 今天晚些时候我要试试这个。
    • 关于你对 UIViewControllers 的声明,自定义容器视图控制器呢?他们有多个视图控制器,由单个视图控制器托管,Apple 从 iOS 5 开始允许这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多