2015-10-22 12 views
8

Nel mio progetto ho creato un ViewController e ho creato un corso come "AVPlayerViewController" per mostrare i video.AVPlayerViewController - Nessun layout automatico - Impossibile soddisfare contemporaneamente i vincoli.

Il codice funziona e sono in grado di vedere i video, tuttavia, ricevo alcuni avvisi di vincoli nella console.

Il mio progetto funziona senza AutoLayout e utilizzo AutoResizing. Ho provato il codice:

self.view.translatesAutoresizingMaskIntoConstraints = false 

ma gli avvertimenti non stanno andando via ed i controlli del lettore video passaggio alla parte superiore dello schermo.

Non ci sono avvertimenti:

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:0x1475c4540 h=-&- v=-&- _UIBackdropContentView:0x147443880.width == _UIBackdropView:0x147436a30.width>", 
    "<NSLayoutConstraint:0x1475b38f0 H:|-(0)-[_UIBackdropView:0x147436a30] (Names: '|':UIView:0x1474368d0)>", 
    "<NSLayoutConstraint:0x1475b3980 H:[_UIBackdropView:0x147436a30]-(0)-| (Names: '|':UIView:0x1474368d0)>", 
    "<NSLayoutConstraint:0x1475b3650 H:|-(0)-[UIView:0x1474368d0] (Names: '|':AVAlphaUpdatingView:0x14744db30)>", 
    "<NSLayoutConstraint:0x1475b36d0 H:[UIView:0x1474368d0]-(0)-| (Names: '|':AVAlphaUpdatingView:0x14744db30)>", 
    "<NSLayoutConstraint:0x1475c7670 H:|-(15)-[UIView:0x1474435c0](LTR) (Names: '|':_UIBackdropContentView:0x147443880)>", 
    "<NSLayoutConstraint:0x1475c54d0 UIView:0x147443b40.right == _UIBackdropContentView:0x147443880.right>", 
    "<NSLayoutConstraint:0x1475c7a40 UIView:0x1474435c0.right == UIView:0x147443b40.left - 10>", 
    "<NSLayoutConstraint:0x1475c4da0 'UIView-Encapsulated-Layout-Width' H:[AVAlphaUpdatingView:0x14744db30(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1475b3980 H:[_UIBackdropView:0x147436a30]-(0)-| (Names: '|':UIView:0x1474368d0)> 

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. 

Qualsiasi idea di cosa fare?

risposta

5

Secondo questa risposta Unable to simultaneously satisfy constraints Warnings with AVPlayerViewController embedded in storyboard la soluzione sembra essere quella di impostare showPlayBackControls su PlayerController e quindi aggiungerlo alla vista.

Una volta che si dispone di un elemento di AVPlayer, è possibile visualizzare nuovamente i controlli del lettore (supponendo che ne siano necessari).

Sospetto che sia necessario un elemento AVPlayer valido affinché i vincoli di controllo del lettore siano correttamente soddisfatti.

Avevo esattamente lo stesso problema e sono riuscito a risolverlo apportando questa modifica. In bocca al lupo!

0

Stranamente, quello che fai è creare una seconda vista sotto la tua vista principale, e quindi aggiungere la tua vista giocatore come sottoview.

Questo stesso problema mi ha richiesto un'intera giornata per risolvere un mese fa, ed è così che è stato risolto. È necessario rimuovere qualsiasi codice che ridimensiona automaticamente i vincoli, però.

+0

@Jamesh Ho provato con lo stesso aggiungere un suvView e aggiungere playerView al suo interno ma l'errore sembra essere lo stesso. Sto usando xcode 8.2 e iOS 10 ogni aiuto sarà apprezzato. –

+0

Devi dimostrare che è quello che stai facendo pubblicando un codice di esempio. –

0

Se si crea la visualizzazione per il controller di visualizzazione al livello di programmazione, aggiungere AVPlayerViewController come controller di visualizzazione figlio e la relativa visualizzazione come sottoview nel metodo loadView() anziché viewDidLoad(). Non è necessario nascondere i controlli di riproduzione.

Problemi correlati