-1

我的 webview 显示包含视频的网页。这个 webview 包含导航栏和状态栏。

问题是在以横向模式观看视频并返回 webview 后,视图高度发生了变化。并且当时没有任何 webview 方法被调用。

它在人像模式下工作正常。

以下是一些视图的屏幕截图:


观看视频前/观看视频后纵向旋转


横向旋转观看视频后

在此处输入图像描述

为什么会这样?

4

2 回答 2

1

观看视频后尝试添加此行..

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

更新:

- (void)viewWillAppear:(BOOL)animated
{
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"MPAVControllerPlaybackStateChangedNotification" object:nil];

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"MPMoviePlaybackStateInterrupted" object:nil];
}

更新方法如下...

#pragma mark - 
#pragma mark NSNotification Action

- (void)update:(NSNotification *)n {
    NSLog(@">>>>>>>>>>>>>>>>>>   Str Key ===>>%@",[NSNotificationCenter defaultCenter]);

    NSLog(@"\n\n\n\n\n>>>>>>>>>>> Updateing  >> %@ >>>>>>>>\n\n",[n description]);

    if ([[[n userInfo]objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 0) {
        NSLog(@">>>>>>  1111111111111111111111111111111111111");
    }
    /*
     >>>>>>>>>>> Updateing  >> NSConcreteNotification 0x9c85740 {name = MPAVControllerPlaybackStateChangedNotification; object = <MPAVController: 0x6770010>; userInfo = {
     MPAVControllerNewStateParameter = 1;
     MPAVControllerOldStateParameter = 2;
     }}>>>>>>>>
     */

    if ([[[n userInfo]objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 1 && [[[n userInfo]objectForKey:@"MPAVControllerOldStateParameter"] intValue] == 2  ) {
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
        //[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
    }


}
于 2012-12-24T06:46:13.327 回答
0

我设法修复它的方法非常简单,基本上是问题的核心:当您旋转视图并且 NavigationController 重新计算其新位置时,它认为它应该位于窗口顶部,因为状态栏是隐。之后显示状态栏和导航栏时,它们是重叠的。

解决这个问题的方法非常简单,只需保留一个 BOOL 来记住您的叠加层是显示还是隐藏,并在您的 ViewController 中实现 willRotateToInterfaceOrientation 和 willAnimateRotationToInterfaceOrientation 。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (!isOverlayShowing)
    {
        [[UIApplication sharedApplication] setStatusBarHidden:NO];
    }
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (!isOverlayShowing)
    {
        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

通过在这两种方法中快速显示和隐藏 StatusBar,StatusBar 在 NavigationBar 重新计算其位置的确切时刻显示。我不知道这是否是解决此问题的最佳实施方式,但到目前为止,此方法有效并且不会在屏幕上产生任何闪烁并且非常流畅。

于 2012-12-24T06:47:28.793 回答