我有一个子视图控制器,无论父视图处于哪种模式,都需要始终以横向模式显示。我将它添加到父视图堆栈中
[[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。
答案 0 :(得分:0)
如何在按下子项时禁用状态栏,并在“弹出”时启用它?
答案 1 :(得分:0)
您只能隐藏子视图控制器的状态栏。
如果您通过self.navigationController推送子视图控制器,只需在子视图控制器中覆盖shouldAutorotateToInterfaceOrientation并将其放入...
return UIInterfaceOrientationIsLandscape( interfaceOrientation );
...这个方法的主体只使其成为风景。