在iOS 8中观看视频后的内容偏移问题

时间:2014-09-18 12:53:05

标签: rotation ios8

我有一个TabBarController,supportedInterfaceOrientations - UIInterfaceOrientationMaskPortrait。当我开始从其中一个标签观看视频,将设备旋转到横向然后从全屏退出时,导航栏会在状态栏下向上移动。为什么会发生这种情况以及如何修复它?

2 个答案:

答案 0 :(得分:1)

这是一种破解,但在我的视图控制器中工作包含UIWebView和全屏视频从< video>开始。标签

您会看到导航栏的抖动,因为在视频全屏窗口消失后调用了UIWindowDidBecomeHiddenNotification

- (void)viewDidLoad
{
    [super viewDidLoad];
    // NOTE: I'm not sure, but MPMoviePlayerWillExitFullscreenNotification won't work
    // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidBecomeHidden:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidBecomeHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)windowDidBecomeHidden:(NSNotification *)notification
{
    UIView *navbar = self.navigationController.navigationBar;
    CGRect barFrame = navbar.frame;
    barFrame.origin.y = 20;
    self.navigationController.navigationBar.frame = barFrame;
    UIView *navbarBack = nil;
    for (UIView *view in navbar.subviews) {
        if ([NSStringFromClass([view class]) isEqual:@"_UINavigationBarBackground"]) {
            navbarBack = view;
            break;
        }
    }
    CGRect backFrame = navbarBack.frame;
    backFrame.origin.y = -20;
    backFrame.size.height = 64;
    navbarBack.frame = backFrame;
    [navbar.superview setNeedsLayout];
}


UIView *navbarBack = [navbar.subviews bk_match:^BOOL(UIView *view) {
    return [NSStringFromClass([view class]) isEqual:@"_UINavigationBarBackground"];
}];

答案 1 :(得分:1)

我遇到了同样的问题。我试图用js来获取" webkitendfullscreen" event,然后发现navbar.frameOriginY = 0,应为20。