【发布时间】:2011-06-28 01:45:06
【问题描述】:
我有一个子视图控制器,无论父视图处于哪种模式,它都需要始终以横向模式显示。我将其添加到父视图堆栈中
[[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 像素的间隙是如果我将状态栏全部隐藏在一起,这是我无法为这个应用程序做的事情。
这是屏幕的外观(以纵向放置,主页按钮位于底部)。请注意状态栏末端的紫色背景是如何不同的 - 我希望我可以将视图移过来,这样白色间隙就不再存在了。
我还打印出了视图和导航控制器的视图框架,它们都报告了 x 和 y 位置在 0,0。导航视图框架报告的尺寸为 320x480,而视图框架为 480x320。
【问题讨论】:
标签: iphone