未检测到iPad启动方向

时间:2010-04-27 14:48:26

标签: iphone orientation ipad interface-orientation

我有一个iPad应用程序正常工作,除了在发布期间的奇怪问题。我读了几个问题&关于方向的答案,但这仍然让我难过。

根视图控制器是一个带有3个选项卡的UITabBarController。其中两个选项卡具有自定义视图控制器(一个基于UIViewController,另一个基于UITableViewController),并且都受此启动方向问题的影响。第三个选项卡是一个嵌入在UINavigationController中的自定义UITableViewController。

好的,这是问题所在。如果我以纵向方向启动应用程序,一切都很好。如果我以横向方向启动它,第3个选项卡可以正常工作。但是,前两个选项卡以纵向方向显示,即使:

  1. 状态栏方向正确显示为横向(在屏幕上展开)。
  2. 标签栏视图正确显示为标注中心的横向。
  3. 对于所有方向,所有视图都返回YES for ShouldAutorotateToInterfaceOrientation。
  4. 如果我在视图控制器的viewWillAppear中调用[self interfaceOrientation]或[[UIApplication sharedApplication] statusBarOrientation],则第3个选项卡的视图控制器报告3(横向),但前两个视图控制器报告1(纵向),即使状态酒吧显然是风景!

    如果我将iPad旋转为纵向并返回横向,则所有3个标签的视图都会正确旋转(上述方法会按预期返回3)。

    此外,如果我点击任何其他标签然后返回标签#1或#2,那么即使没有旋转iPad本身,它们也会正确旋转!

    我错过了什么?

6 个答案:

答案 0 :(得分:3)

您必须将supportedDeviceOrientations添加到“myApp.plist”。

单击此列表,添加“支持的界面方向”键并添加支持的界面方向。这解决了我的问题。

有关详细信息,请点击此链接,转到“应用程序包”部分:http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html

答案 1 :(得分:1)

我终于找到了答案:我在装载控制器中忘了这个。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
}

答案 2 :(得分:1)

我发现设备方向一无所获。并且应该为Unknown返回YES。这样可以使设备以正确的启动方向定位。

以下是我用来将此消息提升到旧邮件的代码。

- (BOOL)shouldAutorotate{
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIDeviceOrientationUnknown) return YES;
    BOOL result = [self shouldAutorotateToInterfaceOrientation:orientation];
    return result;
}

注意如果orientation == UIDeviceOrientationUnknown,则返回YES。这纠正了我的装载问题。

答案 3 :(得分:0)

试试这个

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown);<br>
}

答案 4 :(得分:0)

解决方案是添加密钥

UISupportedInterfaceOrientation

带有一个字符串数组的Info.plist,指定启动时支持的接口方向,这些是

  • UIInterfaceOrientationPortrait
  • UIInterfaceOrientationPortraitUpsideDown
  • UIInterfaceOrientationLandscapeLeft
  • UIInterfaceOrientationLandscapeRight

然而,有一个可能导致混淆的后续问题:至少使用来自XCode 3.2.4的SDK 3.2和iPad模拟器我发现(至少一些)Info.plist设置似乎安装应用程序时缓存和/或不更新。也就是说,添加上面的密钥并在模拟器中安装和启动应用程序无效。但是,从模拟器中删除应用程序可以解决问题,新安装的应用程序的行为符合指定。

答案 5 :(得分:0)

在app delegate的applicationDidFinishLaunchingWithOptions:方法中,将视图控制器的视图添加到窗口后,添加以下内容:

[myViewController viewDidLoad];

如有必要,这将触发对shouldAutorotateToInterfaceOrientation:方法的调用。