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 上全屏显示?