【发布时间】:2011-02-10 19:59:51
【问题描述】:
我有一个在 iPad 上运行良好的拆分视图应用程序。它使用默认设置(纵向弹出窗口,横向左侧的表格视图)。应用程序运行后视图会正确移动。我看到的问题是,当应用程序启动(在模拟器中)以横向模式运行时,UI 范例是用于纵向模式的(主列表是一个弹出窗口)是加载的。
我认为这是模拟器的一些奇怪之处,或者我的主视图控制器上缺少一个选项。
【问题讨论】:
标签: cocoa-touch ipad ios-simulator
我有一个在 iPad 上运行良好的拆分视图应用程序。它使用默认设置(纵向弹出窗口,横向左侧的表格视图)。应用程序运行后视图会正确移动。我看到的问题是,当应用程序启动(在模拟器中)以横向模式运行时,UI 范例是用于纵向模式的(主列表是一个弹出窗口)是加载的。
我认为这是模拟器的一些奇怪之处,或者我的主视图控制器上缺少一个选项。
【问题讨论】:
标签: cocoa-touch ipad ios-simulator
我遇到了与此处描述的相同的问题。令人尴尬的是,解决方案很简单,只需在将视图添加到窗口之前手动设置它的框架。
只需检查界面方向,如果是横向,则切换应用程序框架的宽度和高度尺寸(即,宽度变为高度,高度变为宽度)。
CGRect frame = [[UIScreen mainScreen] applicationFrame];
switch(controller.interfaceOrientation){
case UIInterfaceOrientationPortrait:
case UIInterfaceOrientationPortraitUpsideDown:
[controller.view setFrame:frame];
break;
case UIInterfaceOrientationLandscapeLeft:
case UIInterfaceOrientationLandscapeRight:
[controller.view setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.height, frame.size.width)];
break;
}
【讨论】:
也将其添加为答案,希望对需要相同修复的人来说更明显。
我解决了这个问题。我正在等待加载和解析外部 XML 流。结果,我在 applicationDidFinishLaunching 方法之后使用 splitViewController 视图加载了窗口。
添加:
[window addSubview: splitViewController.view];
[window makeKeyAndVisible];
回到那个方法修复了方向识别
【讨论】:
我通过这样做成功地显示了加载视图
[window addSubview:self._splitViewController.view];
[window addSubview:self._myLoadingView];
self._splitViewController.view.hidden = YES;
[window makeKeyAndVisible];
[self loadAllDatas];
self._splitViewController.view.hidden = NO;
我工作正常
【讨论】:
它不能正常工作,因为 UISplitViewController 的默认细节视图控制器只是一个普通的 UIViewController。 UIViewController 的 shouldRotate 方法仅在纵向模式下返回 YES。
在 shouldRotate 中为所有方向添加一个返回 YES 的通用 UIViewController 解决了我的问题。
【讨论】: