You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI嵌入YouTube视频报-[__NSArrayM length:]错误求助

解决SwiftUI中WKWebView嵌入YouTube视频崩溃的问题

问题根源

崩溃的直接原因是初始化WKWebView时设置了极小的frame(0.1x0.1),YouTube嵌入页面的渲染逻辑在处理这种极端尺寸视图时,错误地向数组对象发送了length消息(该方法属于字符串类),触发了NSInvalidArgumentException。Google页面的布局逻辑对极小尺寸兼容性更好,因此未出现崩溃。

修复方案

方案1:调整WKWebView初始化配置

修改VideoView的makeUIView方法,移除极小frame设置,改用自动适配布局:

struct VideoView: UIViewRepresentable {
    
    let videoID: String
    
    func makeUIView(context: Context) -> WKWebView {
        let webView = WKWebView()
        // 设置自动适配父视图尺寸
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        return webView
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        guard let youtubeURL = URL(string: "https://www.youtube.com/embed/\(videoID)") else { return }
        uiView.scrollView.isScrollEnabled = false
        uiView.load(URLRequest(url: youtubeURL))
    }
}

方案2:在SwiftUI视图中指定明确尺寸

在ContentView中给VideoView添加frame约束,确保WebView有合理的初始尺寸:

struct ContentView: View {
    
    @Environment(\.managedObjectContext) private var viewContext
     
    var body: some View {
        VStack() {
            VideoView(videoID: "CX-BdDHW0Ho")
                .frame(height: 200) // 根据需求调整高度
                .frame(maxWidth: .infinity) // 适配宽度
        }
    }
}

额外检查

如果修复后仍有问题,可以暂时移除Introspect库测试,确认是否存在第三方库对WKWebView的干扰,但根据当前现象,核心问题还是WebView的初始尺寸设置不当。

内容的提问来源于stack exchange,提问作者Jan Verhagen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:15:44