影响导航栏的旋转不可预测

时间:2009-02-18 06:09:40

标签: iphone cocoa-touch

这是我的设置:一个导航​​控制器,两个视图

第一个视图(根视图)显示状态栏和导航栏(纵向视图)。 当rootviewController检测到旋转时,它会隐藏导航栏和状态栏,然后将视图2推到导航控制器上(现在是横向)。

这部分按预期工作。

当View2 viewcontroller检测到旋转(回到纵向)时,它会自动弹出导航控制器,显示视图1.查看1然后取消隐藏状态栏和导航栏。 从这里开始,它变得奇怪了。根据我取消隐藏导航栏的时间,我得到奇怪的结果。如下所示(烧杯照片应位于屏幕顶部导航栏的正下方)。

我尝试取消隐藏导航栏:

  • viewWillRotate / viewDidRotate of view 2
  • viewWillAppear / viewDidAppear of view 1
  • 导航控制器中的
  • poptoRootView(我只是为了尝试)

没有任何作用。任何想法发生了什么?这应该很简单,但也许我在错误的地方做事。

botched screen

3 个答案:

答案 0 :(得分:0)

检查笔尖中所有视图的自动调整遮罩,并确保正确设置。如果你有任何不应该的方式,它将会轮换出来。

答案 1 :(得分:0)

不确定为什么这是必要的,但是当您交换视图时,必须对视图应用转换(只有1个视图,iPhone会为您执行此操作),并且您必须设置它的界限。

以下是适合您的代码(在willAnimateFirstHalfOfRotationToInterfaceOrientation上):

#define degreesToRadians(x) (M_PI * (x) / 180.0)
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
    self.view = landscapeView;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 320);

} else {
    self.view = portraitView;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
    self.view.bounds = CGRectMake(0.0, 0.0, 300, 480);
}

答案 2 :(得分:0)

最后,我重新设计了我的应用。 (使用模态视图控制器)

但是我遇到了类似的问题,而不是状态栏所在的空白区域。

我认为这两个问题都可归因于在旋转/调整视图大小时不与导航控制器交谈(而是我正在与ViewController交谈。

有关我如何解决问题的详细信息:

iPhone + CGAffineTransFormRotate(pi/2) + statusBarHidden:YES + presentModalViewController = 20 pixels of white space