旋转视图在一侧留下20像素间隙

时间:2011-02-16 02:40:36

标签: iphone

我有一个子视图控制器,无论父视图处于哪种模式,都需要始终以横向模式显示。我将它添加到父视图堆栈中

[[self navigationController] pushViewController:controller animated:NO];

我正在尝试强制视图旋转并显示,就好像设备保持在横向方向,即使它仍处于纵向方向。

唯一的问题是无论我将视图框设置为什么尺寸和坐标,我都会在屏幕右侧看到一个20像素的间隙,状态栏在纵向模式下曾经是这样。

我可以调整什么来确保这个差距消失?

以下是我正在进行转换的方式(建议by this SO article

- (void)changeOrientationToLandscape
{
    UIApplication *myApp = [UIApplication sharedApplication];

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation( degreesToRadian(90) );
    landscapeTransform = CGAffineTransformTranslate(landscapeTransform, +90.0, +90.0 );
    [self.view setTransform:landscapeTransform];

    // Change the status bar orientation so it's shown as if we're in landscape
    myApp.statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

    // Manually force view frame - this doesn't seem to fix the 20 pixel gap
    self.view.frame = CGRectMake(0, 0, 480, 320);
}

我唯一一次看到视图占据整个屏幕并且没有20像素的差距就是我将状态栏全部隐藏在一起,这是我不能为此应用做的事情。

以下是屏幕的外观(它以纵向方式保持,底部有主页按钮)。请注意状态栏的结束方式不具有相同的紫色背景 - 我希望我可以将视图移开,以便不再出现白色间隙。

我还打印出了view和navigationController的视图框,它们都报告了 x和y位置为0,0。导航视图框的报告尺寸为320x480,而视图的框架为480x320。

View shifted with 20 pixel gap at top

2 个答案:

答案 0 :(得分:0)

如何在按下子项时禁用状态栏,并在“弹出”时启用它?

答案 1 :(得分:0)

您只能隐藏子视图控制器的状态栏。

如果您通过self.navigationController推送子视图控制器,只需在子视图控制器中覆盖shouldAutorotateToInterfaceOrientation并将其放入...

return UIInterfaceOrientationIsLandscape( interfaceOrientation );

...这个方法的主体只使其成为风景。