0

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

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

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

由于涉及大量代码,我希望我已经解释得足够清楚,以便有更多经验或洞察力的人可能会让我走上正确的轨道。

谢谢吉姆

4

1 回答 1

2

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

- (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;
}

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

于 2010-11-02T16:27:15.163 回答