2

UISplitViewController在我的应用程序的 rootView 中设置了一个。当viewDidLoad在我的左视图控制器中被调用时,我会进行检查,然后使用以下内容呈现模态视图控制器:

SiteConfiguration *config = [[SiteConfiguration alloc] initWithStyle:UITableViewStyleGrouped];
config.firstLoad = YES;
UINavigationController *configNav = [[UINavigationController alloc] initWithRootViewController:config];
if ([Utility isIpad]) {
    configNav.modalPresentationStyle = UIModalPresentationFormSheet;
    configNav.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [[AppDelegate instance].splitViewController presentModalViewController:configNav animated:YES];
} else {
    [self presentModalViewController:configNav animated:YES];
}

如果 iPad 在应用加载时处于横向模式,则 modalView 显示的方向不正确:

在此处输入图像描述

我可以旋转 iPad 来解决这个问题,但为什么它加载错误?我在我的viewController中shouldAutorotateToInterfaceOrientation:返回了 YES 。SiteConfiguration这可能是什么原因造成的?

4

2 回答 2

3

注意你选择在哪里展示你的模态控制器。我有一些自定义模态控制器的经验,并设置模态控制器的方向(及其阴影!)

 - (void)viewDidLoad:(BOOL)animated 

并不总是表现得像预期的那样。

将您的代码 ( presentModalViewController:configNav animated:YES) 放入

 - (void)viewDidAppear:(BOOL)animated 

反而。(对于设置子视图框架或对图层进行任何操作的任何代码,例如阴影层和阴影属性,也可以这样做)。

据我所知,旋转视图的子视图可能不明显,直到之后

 - (void)viewDidLoad:(BOOL)animated 
由于线程问题(一个线程可能会在主线程将旋转传递给子视图(和模态控制器)之前开始绘制您的子视图或模态控制器的视图)。比我有更多线程经验的人可能会对此有所了解。

于 2012-07-19T19:55:47.990 回答
0

shouldAutorotateToInterfaceOrientation:实际上并没有旋转界面,应用程序在收到UIDeviceOrientationDidChangeNotification通知时会这样做。

尝试在方法中添加对设备方向的检查-(void) viewDidAppear:(BOOL)animated

要强制界面旋转,请使用以下代码。

UIDeviceOrientation toInterfaceOrientation = [[UIDevice currentDevice] orientation];
[UIApplication sharedApplication].statusBarOrientation = toInterfaceOrientation;
于 2012-07-19T19:44:22.180 回答