0

我得到了一个项目,该项目是由不再在这里工作的其他人开始的。我有一个包含一些 UIViewControllers 的 UITabBarController。如果应用程序在 iOS 6 上运行,一切运行正常,但是一旦我在 iOS 5 上运行它,所有 UIViews 都会旋转 90 度并给出大约 -100 到 -300 的原始值

我已经能够遍历 tabBar 的所有视图控制器并设置

myView.transform = CGAffineTransformMakeRotation(0.0);
myView setFrame:CGRectMake(0,0,1024,748);

UITabBarController 上的初始视图控制器显示正确,但是,如果我尝试启动模式视图控制器,一切都会再次塞满。包括模态。

对于如何一劳永逸地解决这个问题,我已经没有什么想法了。我在旋转视图的代码中找不到任何内容。

我可以推断出在 iOS 6 上,持有 UITabBarController 的主视图的第一个子视图是 UILayoutContainerView 但在 iOS 5 上,第一个子视图属于 UIView 类

如果这是 iOS5 不支持 UILayoutContainerView 的问题,我现在如何使应用程序向后兼容?

注意:我们仅支持横向(右/左)并且仅在 iPad 上。另外,我注意到如果用户在初始化 UITabBarController 及其子控制器之前旋转应用程序。一切正常。即使您重新运行应用程序并且不再旋转,仍然有效。

提前致谢

4

2 回答 2

0

如果你想让你的应用程序在你的代码中保持横向模式,问题在于 iOS 5,很多人都面临这个问题

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    BOOL returningValue=NO;

    if (interfaceOrientation==UIInterfaceOrientationIsPortrait(interfaceOrientation))
    {
        returningValue=NO;
    }
    else if(UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        returningValue=YES;
    }

    return returningValue;
} 
于 2013-05-09T08:44:28.853 回答
0

显然,这是我出错的地方

iOS 5 在设置应用程序主窗口的视图时,必须使用

[self.window addSubview: tabBarController.view];

而不是(仅限 iOS6)

[self.window setRootViewController: tabBarController];

我不确定这会如何改变一切,以及它不适用于 iOS 5 的原因。尽管如此,它还是奏效了。感谢大家 :)

于 2013-05-10T01:26:37.770 回答