【问题标题】:Rotating view leaves 20 pixel gap on one side旋转视图在一侧留下 20 像素间隙
【发布时间】: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


    【解决方案1】:

    当孩子被推送时禁用状态栏并在“弹出”时启用状态栏怎么样?

    【讨论】:

    • 如何禁用状态栏?我只看到将其设置为隐藏或可见的选项。我确实需要子控制器中可见的状态栏。
    • 如果你在推孩子之前把它隐藏在父母身上?我想您可以在那之后再次向孩子们展示它(并在解雇孩子时撤消一切)。
    • 我不明白。您是说我应该在将子视图推送到父导航控制器之前隐藏状态栏,在显示子视图时将其隐藏,然后在关闭子视图时再次显示?我需要在子视图中显示状态栏。
    • 快到了。如果您需要显示它,请在孩子上重新打开它。这样做和撤消它似乎不合逻辑,但会确认它是您的代码还是 iOS 上的错误。
    • 当且仅当我将状态栏隐藏在子视图中时,视图才会填满整个屏幕。 但是,无论我将视图框架设置为多大,我都无法调整视图的大小。
    【解决方案2】:

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

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

    return UIInterfaceOrientationIsLandscape( interfaceOrientation );
    

    ...到这个方法的主体,使其仅横向。

    【讨论】:

    • 不会这样做,因为 shouldAutoRotate 仅在设备的物理方向更改后才被调用。就我而言,我想显示视图,就好像用户已经旋转到横向,而实际上设备仍处于纵向模式。
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多