2015-12-10 9 views
2

Я работаю над iOS-приложением, используя Objective-C. Запуск последнего xCode во время публикации (7.1.1) и запуск на симуляторе iOS 9.1 и iPhone 6.iOS Status Bar покрытие UINavigationBar после воспроизведения встроенного видео в ландшафте

Мое приложение заблокировано на портрете. 1 часть приложения имеет UIWebView. На UIWebView может быть встроено видео. Когда пользователь воспроизводит видео, он позволяет поворачивать свое устройство к пейзажу (что является ожидаемым поведением). Однако, как только они это сделают, и нажмите «Готово» на видео, строка состояния начнет перекрываться с навигационной панелью (см. Скриншот).

Status Bar overlapping UINavigationBar

Есть другие места в приложении, где я изначально представляя MPMoviePlayerViewController и вращение не оказывает никакого влияния на статус или панели навигации.

Любые мысли?

ответ

0

Проблема заключается в правильном управлении устройством при перемещении по UIViews. Это часто встречается при воспроизведении видео, где видео должно быть пейзажным, но все остальное - портретным. Вот несколько хороших ссылок: Forcing landscape orientation on fullscreen MPMoviePlayerController prevents correct rotation when exiting fullscreen, What is the "right" way to handle orientation changes in iOS 8?. Боб Маккуэн написал книгу «Обучение AV Foundation» и имеет хороший пример кода на своем реестре github https://github.com/bobmccune. Если вам нужна дополнительная информация о образце кода, дайте мне знать, и я могу предоставить другие ссылки.

В качестве простого быстрого исправления вы можете просто попробовать удалить отображение строки состояния, но это не то, что нужно делать.

Я могу опубликовать больше ссылок на примеры кода, если вам нужно, чтобы вы могли видеть, как это делается. Вероятно, это лучший подход, если вы не предоставили часть своего кода.

+0

Дело в том, что я не представляю MPMoviePlayerController, UIWebView по умолчанию. 'ViewWill' и' ViewDidAppear' странно не вызывают, когда пользователь отклоняет MPMoviePlayerController. – user1302023

+0

Проверьте свои ограничения компоновки. Эта ссылка может помочь: http://stackoverflow.com/questions/19078278/is-there-any-way-to-add-constraint-between-a-view-and-the-top-layout-guide-in-a , Кроме того, вы можете отслеживать завершение событий воспроизведения видео, а затем вручную настраивать/фиксировать положение панели навигации. Вот два похожих вопроса, показывающих, как отслеживать эти события: http://stackoverflow.com/questions/21453177/statusbar-issue-on-uiwebview-embedded-youtube-video-playback, http://stackoverflow.com/questions/ 6598537/как к повороту-ан-UIWebView встраиваемого-видео – xdeleon

0
- (void)viewDidLoad { 

    self.navigationBarCenterY = self.navigationController.navigationBar.center.y; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(handleWindowDidBecomeHiddenNotification:) 
               name:UIWindowDidBecomeHiddenNotification 
               object:self.view.window]; 
} 

- (void)handleWindowDidBecomeHiddenNotification:(NSNotification *)notify 
{ 
    if (self.navigationController.navigationBar.center.y != self.navigationBarCenterY) { 
     self.navigationController.navigationBar.center = CGPointMake(self.navigationController.navigationBar.center.x, self.navigationBarCenterY); 
    } 
}