为什么WKWebView不显示视频?- 斯威夫特 3

A.M*_*zer 5 ios nslayoutconstraint swift wkwebview

我成功地WKWebView以编程方式添加了一个 In a viewController(in viewDidLoad())。当加载包含视频的网址时,它看起来很好,但是当我尝试点击它(播放它)时,我看不到它,但音频工作正常。

奇怪的是,我创建了一个新项目只是为了确保它能正常工作,而且确实如此,我复制了与 webView 显示视频相同的代码。

在转换为 Swift 3 之前它运行良好。

这是点击视频时的样子:

敲击前:

在此输入图像描述

点击后:

在此输入图像描述

我还尝试了另一个网页:

敲击前:

在此输入图像描述

点击后(请注意,状态栏现在已隐藏):

在此输入图像描述

简单来说,就是这样的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    let web = WKWebView(frame: view.frame)
    let urlRequest = URLRequest(url: URL(string: "http://www.w3schools.com/html/html5_video.asp")!)       
    web.frame = view.frame
    web.load(urlRequest)

    view.addSubview(web)
 }
Run Code Online (Sandbox Code Playgroud)

我尝试检查很多情况,但没有任何输出。我缺少什么?

提前致谢。

Per*_*son 6

初始化webview时,需要传入两个配置属性。例子:

let webConfiguration = WKWebViewConfiguration()
    webConfiguration.allowsInlineMediaPlayback = true
    webConfiguration.mediaTypesRequiringUserActionForPlayback = []

    webView = WKWebView(frame: .zero, configuration: webConfiguration)
Run Code Online (Sandbox Code Playgroud)

您还需要允许 info.plist 中的任意加载:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoadsForMedia</key>
    <true/>
</dict>
Run Code Online (Sandbox Code Playgroud)


xfd*_*dai 5

我认为视频正在您的 WKWebview 后面播放,您可以调试视图层次结构并将其发布吗?Xcode->Menu->Debug->View Debugging->Capture View Hierarchy播放视频时。

我尝试过一个新的 swift3 项目和您的代码,没有问题,这里是视图层次结构:

在此输入图像描述

你可以从左侧面板中看到,AVPlayerView位于另一个UIWindow中,与WKWebView不同,所以我猜你的项目中包含WKWebView的UIWindow具有更高的windowLevel,因此它显示在包含AVPlayer的UIWindow之上。

通过将默认的 UIWindow 设置为更高的 WindowLevel(UIWindowLevelAlert),我重现了您在项目中看到的内容。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    window?.windowLevel = UIWindowLevelAlert
    return true
}
Run Code Online (Sandbox Code Playgroud)