在旋转时重新定位self.view.frame的问题

时间:2014-12-29 11:36:47

标签: ios objective-c statusbar

我在翻转横向/纵向时使用以下代码调整视图的高度和框架(以补偿隐藏状态栏):

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{

UIInterfaceOrientation toInterfaceOrientation = (UIInterfaceOrientation)[[UIDevice currentDevice]orientation];

if((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)&&
   !UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
    NSLog(@"Going LandScape");
    //self.view.frame = CGRectOffset(self.view.frame, 0, -20);
    self.view.frame = CGRectMake(0, -20, self.view.frame.size.width, self.view.frame.size.height+20);
}
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
    NSLog(@"Going Portrait");
    //self.view.frame = CGRectOffset(self.view.frame, 0, 20);
    self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-20);
}

}

在加载应用程序时,它在我的第一个视图控制器上正常工作。但每当我呈现一个新的(或相同的)视图控制器时,它在向前移动时不会向上移动。我得到正确的日志,就像去画像或风景时一样,而且我在所有的视图控制器上都有相同的代码。谁能告诉我发生了什么事? (注意呈现相同的视图控制器在进入横向时仍会给我带来问题,即使这最初是有效的)

编辑:

更糟糕的是,我尝试在if(landscape)语句中添加一个按钮。该按钮最初会被绘制,但每当我重新呈现视图控制器时,它甚至都不会绘制按钮。我想我正在失去理智......

似乎第一次旋转到风景,无论我在哪个VC上,它都能正常工作。但是然后重新加载任何vc,都会使它无效。

2 个答案:

答案 0 :(得分:0)

我认为解决方案非常简单:函数viewWillTransitionToSize仅在方向更改后才被调用,因此您应该创建帮助类,以某种方式管理旋转或检查视图上的方向是否已加载。

您可以通过在函数中添加断点来简单地测试我的语句。

答案 1 :(得分:0)

这行代码需要在viewWillTransitionToSize:

的开头添加
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

(该死的,我很难意识到我犯了一个非常简单的错误(但通常就是这样:))....因为这个问题长时间拔毛了)