vuelta videos vertical rotar que poner pasar horizontal girar formato esta dar convertir como ios objective-c iphone swift

ios - videos - Barra de navegación debajo de la barra de estado después de la reproducción de video en modo horizontal



poner un video de vertical a horizontal (4)

Es muy sencillo,

rápido 3

override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews(); UIApplication.shared.isStatusBarHidden = false }

El problema:

La barra de navegación está debajo de la barra de estado después de reproducir el video en modo horizontal.

La aplicación:

  • Sólo iOS9.
  • Solo soporta el modo retrato.
  • el controlador de la vista tiene una vista web, la vista web abrirá un enlace de youtube
  • El controlador de vista está incrustado en un controlador de navegación.

Configuraciones para reproducir:

  1. Reproducir un video en una vista web,
  2. Ponga el dispositivo en modo horizontal.
  3. Descartar la reproducción de video en modo horizontal, la aplicación vuelve al modo retrato
  4. La barra de navegación está en la posición incorrecta

Capturas de pantalla:

  1. Cuando se abre la aplicación

  1. Reproductor de video y dispositivo puesto en paisaje.

  1. El problema


Intenté la respuesta de @Makalele, pero no funcionó del todo (o podría bloquearse debido a otro código de prueba). Después de algunas pruebas y pruebas, termino con algo más simple que eso.

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(setNeedsStatusBarAppearanceUpdate) name:UIDeviceOrientationDidChangeNotification object:nil]; [center addObserver:self selector:@selector(setNeedsStatusBarAppearanceUpdate) name:UIWindowDidBecomeHiddenNotification object:nil]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (BOOL)prefersStatusBarHidden { return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); }

Algunas cosas para notar

  1. Puede llamar a setNeedsStatusBarAppearanceUpdate directamente usando el selector.
  2. Se agregó una llamada removeObserver cuando la vista desaparece.
  3. El valor de retorno de prefersStatusBarHidden debe cambiarse de vez en cuando.

Entonces, en el controlador de vista que contiene la vista de YouTube, verá que la barra de estado desaparece antes de ingresar a la pantalla completa de YouTube. Volverá cuando se complete la reproducción de YouTube (a través del evento UIWindowDidBecomeHiddenNotification ).

En caso de que este evento no se active, el otro evento: UIDeviceOrientationDidChangeNotification , se activará siempre que el usuario gire la pantalla (incluso la orientación está bloqueada).

Entonces, la solución de @Makalele tiene doble ruta para activar la barra de estado.

Descubrí que no necesito UIDevice:setValue:forKey: pero su millaje puede variar.

Crédito a @Makalele y @Aaron.


La respuesta de @Aaron casi funciona, solo hay un problema: cuando toca "listo" en el video, mientras mantiene el dispositivo en orientación horizontal, no mostrará la barra de estado hasta que gire el dispositivo nuevamente a vertical.

En ese caso, agregué el observador de notificaciones cuando se presiona el botón "hecho" y luego cambio al modo vertical mediante programación.

Mi código está en el Objetivo C:

- (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoDidRotate) name:UIDeviceOrientationDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closedFullScreen:) name:UIWindowDidBecomeHiddenNotification object:nil]; } -(void)closedFullScreen:(NSNotification *)myNotification{ [[UIDevice currentDevice] setValue: [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] forKey:@"orientation"]; } - (BOOL)prefersStatusBarHidden { return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); } - (void)videoDidRotate { [self setNeedsStatusBarAppearanceUpdate]; }

EDITAR:

La apariencia de la barra de estado basada en el controlador debe verse en SÍ.


Swift 3

En el controlador de vista de presentación, anule la propiedad prefersStatusBarHidden para ocultar solo la barra de estado si está en horizontal.

override var prefersStatusBarHidden: Bool { return UIApplication.shared.statusBarOrientation.isLandscape }

Luego agregue un observador para cuando se gire el dispositivo.

override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(videoDidRotate), name: .UIDeviceOrientationDidChange, object: nil) }

En el método del observador, llame a setNeedsStatusBarAppearanceUpdate :

func videoDidRotate() { self.setNeedsStatusBarAppearanceUpdate() }

Deberias hacer eso.