代码创建WKWebView未入视图层级,加载HTML时出现ViewportSizing报错
解决WKWebView未加入视图层级加载HTML时的
[ViewportSizing]报错 这个报错是iOS 17.1 + Xcode 15.1 beta 3环境下的常见问题,根源是WKWebView还没被添加到视图层级时,它的frame/bounds处于无效状态(比如默认的CGRectZero),导致视口尺寸计算逻辑抛出异常。
下面是两种可行的解决办法:
优先添加到视图层级后再加载HTML
这是最稳妥的方式,先把WKWebView挂载到视图树里,设置好有效的布局约束或frame,再执行加载操作:let webView = WKWebView() webView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(webView) // 给webView设置布局约束,比如铺满父视图 NSLayoutConstraint.activate([ webView.topAnchor.constraint(equalTo: view.topAnchor), webView.leadingAnchor.constraint(equalTo: view.leadingAnchor), webView.trailingAnchor.constraint(equalTo: view.trailingAnchor), webView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) // 现在加载HTML字符串 let htmlContent = "<html><body>示例内容</body></html>" webView.loadHTMLString(htmlContent, baseURL: nil)预加载时先设置临时有效frame
如果业务需要提前预加载HTML,可以先给WKWebView设置一个临时的非零frame,加载完成后再添加到视图层级并调整布局:// 初始化时设置临时有效frame let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480)) // 提前加载HTML let htmlContent = "<html><body>预加载内容</body></html>" webView.loadHTMLString(htmlContent, baseURL: nil) // 后续添加到视图层级并修正布局 webView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(webView) NSLayoutConstraint.activate([ webView.topAnchor.constraint(equalTo: view.topAnchor), webView.leadingAnchor.constraint(equalTo: view.leadingAnchor), webView.trailingAnchor.constraint(equalTo: view.trailingAnchor), webView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ])
另外注意:这个报错属于beta版本的已知问题,苹果后续的正式版大概率会修复,当前用上述方法就能规避。
内容的提问来源于stack exchange,提问作者Blazej SLEBODA
相关产品推荐
相关产品推荐

