2009-02-18 25 views
1

这里是我的设置:一个导航​​控制器,两个视图旋转影响导航栏不可预知

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

该零件按预期工作。

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

我试图取消隐藏导航栏在:

  • viewWillRotate/viewDidRotate的视图2
  • viewWillAppear中/ viewDidAppear的视图在导航控制器1
  • poptoRootView(I子类只是尝试)

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

botched screen

回答

0

检查你的笔尖所有视图的自动尺寸面具,并确保所有的设置正确。如果你有什么不该做的事情,它会轮流出现。

+0

这个答案有点困惑什么是适当的调整大小的掩码?我只是将它保留默认值 – 2009-02-18 07:02:20

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); 
}