iOS 9 UIWebview 嵌入式视频全屏播放导致约束错误

Posted

技术标签:

【中文标题】iOS 9 UIWebview 嵌入式视频全屏播放导致约束错误【英文标题】:iOS 9 UIWebview embedded video fullscreen play cause a constraint error 【发布时间】:2015-12-22 06:42:20 【问题描述】:

刚更新到 Xcode 7 和 ios 9 SDK,发现在 UIWebview 播放 html 5 视频时出现问题。代码很简单,在UIWebview中加载一段HTML代码,播放即可。 HTML 代码包含一个标签,用于播放捆绑包中的视频文件。在 iPhone 上测试时,视频可以在全屏模式下正常播放(默认),但 Xcode 控制台会显示一长串错误消息:

UIWebviewVideoTest[22503:904174] 无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)

(

 "<NSAutoresizingMaskLayoutConstraint:0x7f8df9da8ed0 h=-&- v=-&- _UIBackdropContentView:0x7f8dfc034370.width == _UIBackdropView:0x7f8df9c4ec70.width>",
"<NSLayoutConstraint:0x7f8df9d974e0 H:|-(14)-[UILabel:0x7f8df9c45b40'Slide your finger down to...']   (Names: '|':_UIBackdropContentView:0x7f8dfc034370 )>",
"<NSLayoutConstraint:0x7f8df9d96900 H:[UILabel:0x7f8df9c45b40'Slide your finger down to...']-(14)-|   (Names: '|':_UIBackdropContentView:0x7f8dfc034370 )>",
"<NSLayoutConstraint:0x7f8df9d835c0 H:|-(0)-[_UIBackdropView:0x7f8df9c4ec70]   (Names: '|':UIView:0x7f8df9c52bf0 )>",
"<NSLayoutConstraint:0x7f8df9d83610 H:[_UIBackdropView:0x7f8df9c4ec70]-(0)-|   (Names: '|':UIView:0x7f8df9c52bf0 )>",
"<NSLayoutConstraint:0x7f8df9d83910 H:|-(0)-[UIView:0x7f8df9c52bf0]   (Names: '|':AVAlphaUpdatingView:0x7f8df9c44190 )>",
"<NSLayoutConstraint:0x7f8df9d83960 H:[UIView:0x7f8df9c52bf0]-(0)-|   (Names: '|':AVAlphaUpdatingView:0x7f8df9c44190 )>",
"<NSLayoutConstraint:0x7f8df9daf950 'UIView-Encapsulated-Layout-Width' H:[AVAlphaUpdatingView:0x7f8df9c44190(0)]>"

)

将尝试通过打破约束来恢复

<NSLayoutConstraint:0x7f8df9d96900 H:[UILabel:0x7f8df9c45b40'Slide your finger down to...']-(14)-|   (Names: '|':_UIBackdropContentView:0x7f8dfc034370 )>

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。

我在 iPad 上测试时,内联播放模式是可以的,但是在全屏模式下播放视频时,在控制台中显示了类似的错误。似乎该错误与 UIWebview 中的全屏视频播放有关。有谁知道为什么会生成此错误消息以及如何避免它?谢谢!

【问题讨论】:

我在 Xcode 6.3 和 iOS 8 SDK 中使用 swift 测试时没有显示错误信息。 能否请您提供您在 webView 中添加了哪些约束。还有你是如何实例化它的。 我只是在 UIWebview 和根视图之间添加了顶部、底部、前导和尾部约束,以创建一个“边距”区域。并且根视图中只有一个子视图(UIWebview)。 如果 UIWebView 以编程方式添加,请确保 translatesAutoresizingMaskIntoConstraints 设置为 NO 我仍然面临与 iOS 9.2 相同的问题。有谁能解决吗? 【参考方案1】:

这是 Apple 的错误。

错误已在较新的 iOS 版本中得到修复。

如果您仍然遇到这种情况,请向 Apple 提交错误报告。

【讨论】:

以上是关于iOS 9 UIWebview 嵌入式视频全屏播放导致约束错误的主要内容,如果未能解决你的问题,请参考以下文章

iPad SDK:嵌入式 YouTube 电影在 UIWebView 后面播放全屏版本

我可以在 UIWebView 内联(不是全屏)中播放 youtube 视频吗?

如何强制在 UIWebView 中播放的视频在 iPad 上全屏显示?

iOS:HTML5 视频,在全屏状态下连续播放

模态全屏 iOS 8 后视频无法在 mpmovieplayercontroller 上播放

IOS6 横向在仅纵向 iPhone 应用程序中从 uiwebview 播放嵌入的 youtube 视频