从UISplitViewController呈现的modalViewController出现错误的方向

时间:2012-07-19 19:35:51

标签: objective-c ios cocoa-touch uisplitviewcontroller modalviewcontroller

我在应用程序的rootView中设置了UISplitViewController。在我的左视图控制器中调用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方向不正确:

enter image description here

我可以旋转iPad来解决这个问题,但为什么加载错误呢?我在shouldAutorotateToInterfaceOrientation: viewController中SiteConfiguration返回YES。可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:3)

小心选择提供模态控制器的位置。 我有一些自定义模态控制器的经验,并在

中设置模态控制器的方向(及其阴影!)
 - (void)viewDidLoad:(BOOL)animated 

并不总是按预期行事。

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

 - (void)viewDidAppear:(BOOL)animated 

代替。 (也可以使用任何设置子视图框架的代码或对图层进行任何操作,例如阴影图层和阴影属性)。

据我所知,由于线程问题,旋转视图的子视图直到

 - (void)viewDidLoad:(BOOL)animated 
之后旋转可能不明显(一个线程可能开始绘制子视图或模态控制器的视图之前旋转通过主线程传递给子视图(和模态控制器)。对线程有更多经验的人可能会对此有更多了解。

答案 1 :(得分:0)

shouldAutorotateToInterfaceOrientation:实际上没有旋转界面,应用会在收到UIDeviceOrientationDidChangeNotification通知后执行此操作。

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

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

UIDeviceOrientation toInterfaceOrientation = [[UIDevice currentDevice] orientation];
[UIApplication sharedApplication].statusBarOrientation = toInterfaceOrientation;