3

我很难让它工作,而苹果开发者论坛也没有任何帮助。

我有一个播放视频的应用程序,当显示电影控件并旋转 iPad 时,状态栏会保持在方向开始之前视频所在的方向。然后在视图顶部有一个 20px 的间隙,而状态栏在另一个方向。

有没有人看到这个问题?

任何帮助将不胜感激。

4

2 回答 2

2

我有同样的问题:

  • 纵向启动应用程序(例如)
  • 启动视频播放器(我们使用 显示presentModalViewController)。
  • 旋转 iPad
  • 按“完成”退出视频。

砰!我们的应用程序的布局被破坏(我们为每个方向做了一些自定义布局),并且状态栏在错误的位置,尽管在视频中位于正确的位置。

我做了两件事来解决这两个问题:

  • 确保我们在 中完成的自定义配置在viewWillAppear调用之后完成[super viewWillAppear];
  • MPMoviePlayerDidExitFullscreenNotification为and实现观察者MPMoviePlayerPlaybackDidFinishNotification(在我的情况下,单击“完成”时从未调用过第一个观察者)。

观察者回调的代码如下所示:

[self performSelector: @selector(checkAndFixStatusBar)
           withObject: nil
           afterDelay: 0];

[[NSNotificationCenter defaultCenter] removeObserver: self];

最后一个方法,在故意 0 延迟后调用:

- (void)checkAndFixStatusBar
{
    UIInterfaceOrientation intOrient = self.interfaceOrientation;
    UIInterfaceOrientation sbOrient = [[UIApplication sharedApplication] statusBarOrientation];

    if (intOrient != sbOrient)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation: intOrient animated: NO];
        NSLog(@"Fixed status bar orientation"); 
    }
}

状态栏仍然有明显的闪烁,但这是我想出的最好的。

希望这可以帮助。

编辑:我已经删除了该performSelector步骤,并直接调用了状态栏设置,在我的情况下,它没有明显的区别(仍然闪烁)。

于 2010-08-23T12:19:32.867 回答
2

I had the same issue, plus my view was still screwed up after returning the movie player to windowed mode. I don't know how to fix this during fullscreen play, but at least after switching back to windowed you can fix up the status bar like this:

  • register an observer for MPMoviePlayerWillExitFullscreenNotification
  • in the notification callback function, launch an NSTimer to call another function a bit (like 0.1s) later
  • in the timer function do

    [[UIApplication sharedApplication] setStatusBarOrientation:[[UIDevice currentDevice] orientation] animated:NO];

于 2010-08-09T21:21:34.087 回答