ios objective-c xcode autolayout avplayerviewcontroller

ios - No se pueden cumplir las restricciones al mismo tiempo Advertencias con AVPlayerViewController incrustadas en el guión gráfico



objective-c xcode (6)

De hecho, creo que es un error en el lado de Apple.

Encontré una solución alternativa: configure showsPlaybackControls en YES después de que se haya establecido AVPlayerViewController.player.

Modifico tu muestra con las siguientes líneas y no aparece más error de restricción:

@interface ViewController () @property(weak, nonatomic) AVPlayerViewController * playerViewController; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"]; NSURL *url = [[NSURL alloc] initFileURLWithPath: path]; AVPlayer * player = [AVPlayer playerWithURL:url]; self.playerViewController.player = player; self.playerViewController.showsPlaybackControls = YES; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"AVPlayerSegue"]) { self.playerViewController = segue.destinationViewController; } } @end

Tenga en cuenta que el archivo test.mp4 se ha agregado al proyecto.

Estoy tratando de configurar un AVPlayerViewController por completo a través de guiones gráficos mediante la incrustación en un controlador de vista por separado.

Pasos:

  1. Crear aplicación de vista única en Xcode.
  2. Incrustar VC en el controlador de navegación.
  3. Agregue la barra de herramientas en la parte inferior. (Fijado a supervista (Guía de diseño inicial, final, inferior, Altura (44)).
  4. Agregue vista de contenedor en Controlador de vista primario. (Fijado a supervista (inicial, final), guía de diseño superior, barra de herramientas superior).
  5. Elimine el controlador de vista predeterminado que viene con la vista de contenedor.
  6. Arrastre el objeto de controlador de vista de AV Player desde la biblioteca de objetos.
  7. Conecte la transición de inserción desde la Vista de contenedor al Controlador de vista de reproductor AV.

SIN CÓDIGO AGREGADO.

Así es como se ve mi guión gráfico :

Ver jerarquía:

Todo funciona bien: PERO EL PROBLEMA ES: Tan pronto como lo ejecuto, recibo estas advertencias en el depurador:

2015-09-30 12:58:35.904 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f932592bc70 H:|-(14)-[UILabel:0x7f9325925590''Hi-Speed Scrubbing''] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592bcf0 H:[UILabel:0x7f9325925590''Hi-Speed Scrubbing'']-(14)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f932592bcf0 H:[UILabel:0x7f9325925590''Hi-Speed Scrubbing'']-(14)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.905 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f932592bdd0 H:|-(14)-[UILabel:0x7f9325929bb0''Slide your finger up to a...''] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592be50 H:[UILabel:0x7f9325929bb0''Slide your finger up to a...'']-(14)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f932592be50 H:[UILabel:0x7f9325929bb0''Slide your finger up to a...'']-(14)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.906 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSLayoutConstraint:0x7f932592b5e0 V:|-(>=0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b660 V:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592af50 V:[UIView:0x7f932585e830(44)]>", "<NSLayoutConstraint:0x7f9325952c30 ''UIView-Encapsulated-Layout-Height'' V:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f932592b660 V:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.907 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f9325829f90 H:[AVButton:0x7f93258609b0]-(15)-[UILabel:0x7f932347dc20''--:--''](LTR)>", "<NSLayoutConstraint:0x7f9325839550 H:[UILabel:0x7f932347dc20''--:--'']-(12)-[AVScrubber:0x7f93234a4350](LTR)>", "<NSLayoutConstraint:0x7f932585a2f0 AVScrubber:0x7f93234a4350.right == UILabel:0x7f932583a470''--:--''.left - 12>", "<NSLayoutConstraint:0x7f932580b390 UILabel:0x7f932583a470''--:--''.right == AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f9325829f90 H:[AVButton:0x7f93258609b0]-(15)-[UILabel:0x7f932347dc20''--:--''](LTR)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.909 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f9325859740 H:[AVButton:0x7f93258609b0]-(>=15)-[UILabel:0x7f93234e53f0''Live Broadcast''](LTR)>", "<NSLayoutConstraint:0x7f932583bea0 UILabel:0x7f93234e53f0''Live Broadcast''.right <= AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f9325859740 H:[AVButton:0x7f93258609b0]-(>=15)-[UILabel:0x7f93234e53f0''Live Broadcast''](LTR)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.910 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f9323520650 H:|-(0)-[UIActivityIndicatorView:0x7f93234e6ee0] (Names: ''|'':UIView:0x7f93234e6120 )>", "<NSLayoutConstraint:0x7f93235206a0 H:[UIActivityIndicatorView:0x7f93234e6ee0]-(10)-[UILabel:0x7f93235203b0''Loading/U2026'']>", "<NSLayoutConstraint:0x7f9323520740 H:[UILabel:0x7f93235203b0''Loading/U2026'']-(0)-| (Names: ''|'':UIView:0x7f93234e6120 )>", "<NSLayoutConstraint:0x7f9323521f90 H:|-(>=0)-[UIView:0x7f93234e6120] (Names: ''|'':AVLoadingIndicatorView:0x7f93234e5fb0 )>", "<NSLayoutConstraint:0x7f9323510da0 UIView:0x7f93234e6120.centerX == AVLoadingIndicatorView:0x7f93234e5fb0.centerX>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f932583bbc0 H:[AVButton:0x7f93258609b0]-(>=15)-[AVLoadingIndicatorView:0x7f93234e5fb0](LTR)>", "<NSLayoutConstraint:0x7f932583bc10 AVLoadingIndicatorView:0x7f93234e5fb0.right <= AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f93235206a0 H:[UIActivityIndicatorView:0x7f93234e6ee0]-(10)-[UILabel:0x7f93235203b0''Loading…'']> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.912 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f9323521f90 H:|-(>=0)-[UIView:0x7f93234e6120] (Names: ''|'':AVLoadingIndicatorView:0x7f93234e5fb0 )>", "<NSLayoutConstraint:0x7f9323510da0 UIView:0x7f93234e6120.centerX == AVLoadingIndicatorView:0x7f93234e5fb0.centerX>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f932583bbc0 H:[AVButton:0x7f93258609b0]-(>=15)-[AVLoadingIndicatorView:0x7f93234e5fb0](LTR)>", "<NSLayoutConstraint:0x7f932583bc10 AVLoadingIndicatorView:0x7f93234e5fb0.right <= AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f9323510da0 UIView:0x7f93234e6120.centerX == AVLoadingIndicatorView:0x7f93234e5fb0.centerX> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.912 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f9323521f90 H:|-(>=0)-[UIView:0x7f93234e6120] (Names: ''|'':AVLoadingIndicatorView:0x7f93234e5fb0 )>", "<NSLayoutConstraint:0x7f9323510d10 H:[UIView:0x7f93234e6120]-(>=0)-| (Names: ''|'':AVLoadingIndicatorView:0x7f93234e5fb0 )>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f932583bbc0 H:[AVButton:0x7f93258609b0]-(>=15)-[AVLoadingIndicatorView:0x7f93234e5fb0](LTR)>", "<NSLayoutConstraint:0x7f932583bc10 AVLoadingIndicatorView:0x7f93234e5fb0.right <= AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f9323510d10 H:[UIView:0x7f93234e6120]-(>=0)-| (Names: ''|'':AVLoadingIndicatorView:0x7f93234e5fb0 )> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2015-09-30 12:58:35.913 AVPlayerTest[9352:446772] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7f93259513b0 h=-&- v=-&- _UIBackdropContentView:0x7f9325860000.width == _UIBackdropView:0x7f932585e990.width>", "<NSLayoutConstraint:0x7f932592ba00 H:|-(0)-[UIView:0x7f932585fbc0] (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592ba80 H:[UIView:0x7f932585fbc0]-(0)-| (Names: ''|'':_UIBackdropContentView:0x7f9325860000 )>", "<NSLayoutConstraint:0x7f932592b770 H:|-(0)-[_UIBackdropView:0x7f932585e990] (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b7f0 H:[_UIBackdropView:0x7f932585e990]-(0)-| (Names: ''|'':UIView:0x7f932585e830 )>", "<NSLayoutConstraint:0x7f932592b450 H:|-(0)-[UIView:0x7f932585e830] (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932592b4d0 H:[UIView:0x7f932585e830]-(0)-| (Names: ''|'':AVAlphaUpdatingView:0x7f932585e310 )>", "<NSLayoutConstraint:0x7f932582a040 H:|-(14)-[AVButton:0x7f93258609b0](LTR) (Names: ''|'':UIView:0x7f932585fbc0 )>", "<NSLayoutConstraint:0x7f932586f490 AVButton:0x7f932585e480.right == AVButton:0x7f93234d1790.left - 10>", "<NSLayoutConstraint:0x7f932580b340 AVButton:0x7f93234d1790.right == AVButton:0x7f93234d6540.left - 10>", "<NSLayoutConstraint:0x7f932584c870 AVButton:0x7f93234d6540.right == UIView:0x7f932585fbc0.right - 14>", "<NSLayoutConstraint:0x7f932583bbc0 H:[AVButton:0x7f93258609b0]-(>=15)-[AVLoadingIndicatorView:0x7f93234e5fb0](LTR)>", "<NSLayoutConstraint:0x7f932583bc10 AVLoadingIndicatorView:0x7f93234e5fb0.right <= AVButton:0x7f932585e480.left - 15>", "<NSLayoutConstraint:0x7f932594aa10 ''UIView-Encapsulated-Layout-Width'' H:[AVAlphaUpdatingView:0x7f932585e310(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f932583bbc0 H:[AVButton:0x7f93258609b0]-(>=15)-[AVLoadingIndicatorView:0x7f93234e5fb0](LTR)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Perdón por el registro largo, pero todo aparece a la vez, por lo que lo incluyo. ¿Qué me estoy perdiendo? El diseño automático funciona de maravilla. Incluso en rotación. ¿Por qué estoy viendo estas advertencias?

Proyecto de ejemplo agregado

PD : utilizando la versión 7.0 de Xcode

ACTUALIZAR

Desmarcar Shows Playback Controls en AVPlayerViewController en Attributes. El Inspector lo arregla de alguna manera y no veo advertencias. Pero necesito los controles. Parece más y más como un error.


Descargué tu código y lo eché un vistazo. No estás haciendo nada malo. El hecho de que pueda desmarcar "Muestra el control de reproducción" parece indicar que el problema radica en el marco de AVKit. Incluso he intentado establecer el valor en falso en el archivo XIB y luego llamar a [self setShowsPlaybackControls:YES]; after viewDidAppear: con los mismos resultados. Esto definitivamente es un error de Apple y deberías generar un informe de error.


En mi caso, AVPlayerViewController a los iPhones solo el modo vertical mientras que el AVPlayerViewController tiene todas las direcciones.

En AppDelegate tengo un código que se ve así:

public func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { if self.window?.rootViewController?.presentedViewController is AVPlayerViewController { return .All } return Device.current.contains(.iPhone) ? [.Portrait, .PortraitUpsideDown] : .All }

Cuando AVPlayerViewController se presenta de forma modal, se gira a modo horizontal y se descarta, obtengo una pila de errores muy sonriente que rompe algunas restricciones.

Para solucionarlo, agregué este código a mi RootViewController , que también presenta cualquier instancia de AVPlayerViewController en mi aplicación:

public override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) { if let playerViewController = self.presentedViewController as? AVPlayerViewController { playerViewController.showsPlaybackControls = false } super.dismissViewControllerAnimated(flag, completion: completion) }

Básicamente estoy captando el momento en que el usuario toca el botón de descartar y utiliza la solución alternativa encontrada en la publicación de la pregunta original.


Esta advertencia dice que ha usado una restricción adicional que no necesitaba ser utilizada.

ToolBarHeight de forma predeterminada es 44 para todos los dispositivos de iPhone. Aquí ha utilizado la restricción de altura para UIToolBar . Entonces la Restricción de Altura de la Barra de Herramientas es extra aquí, elimine esta restricción, la advertencia se eliminará automáticamente


Lamentablemente, este error todavía está presente en ios 10.1. De todos modos, he observado que si presento el controlador de vista con el seekTime establecido en 0, el error no está presente. Entonces, mi solución fue detener al jugador, retener el tiempo actual, buscar al jugador a 0, presentar el controlador y al completarlo hacer lo siguiente: buscar el tiempo retenido y jugar de nuevo.

AVPlayer *player; AVPlayerViewController *avPlayerController; CMTime currentTime; - (void)viewDidLoad { [super viewDidLoad]; NSURL *videoURL = [NSURL URLWithString:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"]; player = [AVPlayer playerWithURL:videoURL]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; [self.playerView.layer addSublayer:playerLayer]; playerLayer.frame = self.playerView.bounds; avPlayerController = [[AVPlayerViewController alloc] init]; avPlayerController.player = player; } - (IBAction)fullScreen:(id)sender { [player pause]; currentTime = player.currentTime; [player seekToTime:CMTimeMake(0, 1)]; [self presentViewController:avPlayerController animated:YES completion:^{ [avPlayerController.player seekToTime:currentTime]; [avPlayerController.player play]; }]; }


Me di cuenta de que esto está sucediendo cuando intentas presentar la misma instancia de AVPlayerViewController (utilizando una propiedad de referencia fuerte) la segunda, tercera ... hora etc. y los controles del reproductor no se reinician (es decir, el progreso no está al principio).

En realidad, si enfrenta el mismo escenario, antes de tocar "Listo", intente arrastrar la barra de progreso al principio y presente AVPlayerViewController nuevamente. ¡Entonces el problema del diseño automático debería desaparecer!

Así que, básicamente, el problema del Autolayout (problema de Apple, por cierto) puede corregirse si restablece los controles antes de descartar AVPlayerViewController. Pero, ¿y si quieres presentar el mismo video? En mi caso, quiero mantener la referencia a AVPlayerItem:

@property (strong, nonatomic) AVPlayerItem *playerItem;

Pero no quiero que este accidente suceda:

*** Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''An AVPlayerItem cannot be associated with more than one instance of AVPlayer'' *** First throw call stack: (0x184035900 0x1836a3f80 0x18a254958 0x18a23fc14 0x100054a2c 0x188d5fe50 0x188d5fdcc 0x188d47a88 0x188d5f6e4 0x188d18294 0x188d58820 0x188d57e1c 0x188d284cc 0x188d26794 0x183fecefc 0x183fec990 0x183fea690 0x183f19680 0x185428088 0x188d90d90 0x1000eea78 0x183aba8b8) libc++abi.dylib: terminating with uncaught exception of type NSException

Así que mi solución fue crear una copia de AVPLayerItem cada vez que presiono AVPlayerViewController. De esta forma, el problema del bloqueo y del diseño automático desapareció. Sin embargo, el video se restablece cada vez que empuja el reproductor.

AVPlayerViewController *playerViewController = [AVPlayerViewController new]; playerViewController.player = [[AVPlayer alloc] initWithPlayerItem:self.playerItem.copy];