自动旋转ipad子视图

时间:2010-08-23 19:09:15

标签: ipad autorotate

我有一个我正在处理的大型应用程序,它有一个主视图,称之为根视图,顶部有工具栏,用于程序控制。有许多其他视图覆盖“根”视图但让工具栏可见 - 有一个弹出菜单控制在“根”视图上显示哪个子视图。请注意,我没有使用splitview控制器。

要节省资源,我会在第一次从菜单中选择其功能时初始化不同的子视图。所有子视图都是在IB中设计的。当ipad处于纵向模式时,首先选择子菜单时,所有自动旋转都可以正常工作,但是当ipad在首次启动应用程序并且首次启动子视图时处于横向时,它们不会旋转并显示在剪裁的肖像模式。他们似乎不知道iPad是旋转的。

如果我从“root”viewDidLoad方法初始化所有子视图,它们都会正确旋转,无论ipad启动时的方向如何。因此,如果我在“根”视图可见之前初始化子视图,那么一切都很好。如果我在“根”视图变为可见后初始化它们,则子视图似乎不会自动旋转。

由于涉及很多代码,我希望我已经足够清楚地解释了这一点,因此有更多经验或洞察力的人可能会让我走上正轨。

谢谢吉姆

1 个答案:

答案 0 :(得分:2)

吉姆, 将子视图添加到主UIWindow时,添加它们的顺序的更改可能会影响这些视图受设备初始方向影响的方式。例如,在具有导航控制器(在代码中创建)和视图控制器(在IB中创建)的应用程序中,无论初始方向如何,以下代码都将正确显示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

        [self.window addSubview:navigationController.view];
        [self.window addSubview:viewController.view];
        [self.window makeKeyAndVisible];

        return YES;
}

但是,当应用程序以横向模式启动时,以下代码将被搞砸(请注意窗口中addSubview调用的顺序):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
 UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

        [self.window addSubview:viewController.view];
        [self.window addSubview:navigationController.view];
        [self.window makeKeyAndVisible];

        return YES;
}

我会尝试更改添加子视图的顺序。希望这有帮助!