UIView旋转神奇地发生

时间:2013-05-09 07:24:22

标签: ios ipad ios5 uiview

我得到了一个由不再在这里工作的人启动的项目。 我有一个UITabBarController,它包含一些UIViewControllers。 如果应用程序在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及其子控制器之前旋转应用程序。一切正常。即使您重新运行应用程序而不是再次旋转,仍然有效。

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您希望您的应用程序坚持横向模式,您可以使用版本代码,问题出在iOS 5中,很多人都面临这个问题

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

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

    return returningValue;
} 

答案 1 :(得分:0)

显然,这是我出错的地方

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

[self.window addSubview: tabBarController.view];

而不是(仅限iOS6)

[self.window setRootViewController: tabBarController];

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