从 UISplitViewController 呈现的 modalViewController 出现方向错误
Posted
技术标签:
【中文标题】从 UISplitViewController 呈现的 modalViewController 出现方向错误【英文标题】:modalViewController presented from UISplitViewController comes up as the wrong orientation 【发布时间】:2012-07-19 19:35:51 【问题描述】:我有一个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 来解决这个问题,但为什么加载错误?我有shouldAutorotateToInterfaceOrientation:
在我的SiteConfiguration
viewController 中返回YES。这可能是什么原因造成的?
【问题讨论】:
【参考方案1】:请注意您选择展示模态控制器的位置。 我有一些自定义模态控制器的经验,并在
中设置模态控制器的方向(及其阴影!) - (void)viewDidLoad:(BOOL)animated
并不总是按预期运行。
将您的代码 (presentModalViewController:configNav animated:YES
) 放入
- (void)viewDidAppear:(BOOL)animated
相反。 (对于设置子视图框架或对图层进行任何操作的任何代码,例如阴影图层和阴影属性,也可以这样做)。
据我所知,在旋转视图的子视图之前,旋转可能不明显
- (void)viewDidLoad:(BOOL)animated
由于线程问题(一个线程可能会在主线程将旋转传递给子视图(和模态控制器)之前开始绘制您的子视图或模态控制器的视图)。比我有更多线程经验的人可能会对此有所了解。
【讨论】:
哎呀,我的意思是输入viewDidAppear:
。我已经适当地编辑了我的答案【参考方案2】:
shouldAutorotateToInterfaceOrientation:
实际上并没有旋转界面,应用程序在收到UIDeviceOrientationDidChangeNotification
通知时会这样做。
尝试在-(void) viewDidAppear:(BOOL)animated
方法中添加对设备方向的检查。
要强制界面旋转,请使用以下代码。
UIDeviceOrientation toInterfaceOrientation = [[UIDevice currentDevice] orientation];
[UIApplication sharedApplication].statusBarOrientation = toInterfaceOrientation;
【讨论】:
以上是关于从 UISplitViewController 呈现的 modalViewController 出现方向错误的主要内容,如果未能解决你的问题,请参考以下文章
从 UISplitViewController 呈现的 modalViewController 出现方向错误
UISplitViewController - 从详细信息更新主表视图
UISplitViewController 从任何地方平移到主视图
从 UISplitViewController 显示时,UITableViewController 自动滚动停止考虑键盘
如何从 UISplitViewController IOS 5 导航回来?
从 UISplitViewController 中的 Detail 视图控制器导航到正常的全尺寸 UIViewController