【发布时间】:2020-12-09 20:54:31
【问题描述】:
我正在尝试将 WKWebView 移植到 SwiftUI。这是我的代码:
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
WebViewWrapper()
}
}
/**
WKWebView ported over to SwiftUI with `UIViewRepresentable`.
*/
final class WebViewWrapper: UIViewRepresentable {
/// `UIViewRepresentable` required function #1.
func makeUIView(context: Context) -> WKWebView {
print("make")
let webView = WKWebView() /// EXC_BREAKPOINT error here
return webView
}
/// `UIViewRepresentable` required function #2
func updateUIView(_ uiView: WKWebView, context: Context) {
}
}
就是这样。我创建了一个新的 SwiftUI 项目并将其粘贴进去。但是,我收到了这个错误:
线程 1:EXC_BREAKPOINT(代码=EXC_I386_BPT,子代码=0x0)
... 控制台中没有打印任何内容。这发生在 iOS 13.0 和 iOS 13.1 上。
但是,在 iOS 14.2 上,它运行良好。崩溃似乎也只发生在 WKWebView。例如,如果我将其替换为UITextView,则它可以正常运行。
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
TextViewWrapper()
}
}
/**
UITextView ported over to SwiftUI with `UIViewRepresentable`.
*/
final class TextViewWrapper: UIViewRepresentable {
/// `UIViewRepresentable` required function #1.
func makeUIView(context: Context) -> UITextView {
print("make")
let textView = UITextView() /// no error, works fine
return textView
}
/// `UIViewRepresentable` required function #2
func updateUIView(_ uiView: UITextView, context: Context) {
}
}
我在 M1 Mac 上运行 Big Sur 11.0.1,但我认为这应该不是问题。我的 Xcode 版本是 12.2 (12B45b)。
编辑:Big Sur / M1 可能是问题所在。
我刚刚在我的 Intel Mac Catalina 10.15.5 上运行相同版本的 Xcode,它运行良好。
【问题讨论】:
-
当您使用
init(frame: CGRect, configuration: WKWebViewConfiguration)和非零帧时会发生什么。 ? -
@WarrenBurton 感谢您的建议,但没有任何改变。 screenshot
-
适用于 Xcode 12.1 / iOS 13.4。你用的是哪一个?
-
@Asperi 我在 Xcode 12.2 (12B45b) 和 iOS 13.0 上。也在 iOS 13.1 上测试
标签: ios swift swiftui wkwebview uiviewrepresentable