AVPlayerViewController - 无自动布局 - 无法同时满足约束。

时间:2015-10-22 16:04:52

标签: ios swift autolayout constraints

在我的项目中,我创建了一个ViewController并创建了一个类“AVPlayerViewController”以显示视频。

代码有效,但我能看到视频,但是我在控制台中收到了一些限制警告。

我的项目在没有AutoLayout的情况下工作,我使用AutoResizing。我试过了代码:

self.view.translatesAutoresizingMaskIntoConstraints = false

但警告不会消失,视频播放器的控件移动到屏幕顶部。

有警告:

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.

任何想法该怎么做?

3 个答案:

答案 0 :(得分:5)

根据这个答案Unable to simultaneously satisfy constraints Warnings with AVPlayerViewController embedded in storyboard,解决方案似乎是在PlayerController上设置showsPlayBackControls,然后将其添加到视图中。

获得AVPlayer项目后,您可以再次显示播放器控件(假设您需要它们)。

我怀疑需要一个有效的AVPlayer项才能正确满足玩家控制约束。

我有完全相同的问题并设法通过进行此更改来修复它。祝你好运!

答案 1 :(得分:0)

奇怪的是,您所做的是在主视图下创建第二个视图,然后将您的播放器视图添加为子视图。

这个问题花了我整整一天的时间来解决一个月前,这就是它如何解决的问题。但是,您必须删除任何自动调整约束的代码。

答案 2 :(得分:0)

如果以编程方式为视图控制器创建视图,请将AVPlayerViewController添加为子视图控制器,并将其视图作为loadView()方法中的子视图而不是viewDidLoad()。无需隐藏播放控件。