SwiftUI 布局中的 WKWebViews 得到更新 - 变成空白

WKWebViews in SwiftUI layout get updated - become blank

我的 iOS SwiftUI 应用在布局中有一些 WKWebView。

可以通过创建一个包含 WKWebView 的特殊视图来实现,正如其他 SO 问题所知道的那样。

包括合适的方法:

func webView(_ webView: WKWebView,
    didFinish navigation: WKNavigation!)
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
func makeUIView(context: Context) -> WKWebView
func updateUIView(_ uiView: WKWebView, context: Context)

主屏幕有两个 WKWebView,一个在左边,另一个在右边,在包含 WebView 的两个不同视图中(这就是我命名 WKWebView 封闭视图的方式)。

所以在一个HStack中有两个view,而且他们分屏了。

这些视图中的每一个都有自己的布局,但其中也有一个 WebView。

左侧 WebView 正确显示应用创建的 HTML 页面。

右边的WebView里面有一个可编辑的文本区域。

以下是在iOS模拟器上测试的,不知道在真机上是否一样,但很有可能。

当我编辑一些文本时,我认为布局重新计算并且我体验到两个WebView变成空白,

并调用updateUIView方法。

正文中的 WebView 引用了在正文外部分配的变量,因此

就像

左视图

var body: some View
{

leftWebView

}

而不是

var body: some View
{

LeftWebView()

}

因此不应重新创建它。

确实我认为它没有重新创建,但它变成了空白。

我找到了可能的解决方案或解决方法。

代码我就不提供了,不知道好不好,就总结一下吧

对我有用。

而不是在 SwiftUI 视图中嵌入 WKWebView

我在 SwiftUI 视图中嵌入了一个 ViewController。 SwiftUI View 端的实现只是一些不同。

示例很容易找到。

这个 ViewController 承载一个从 xib 文件加载的视图,它是一个简单的视图,我在设计器工具中创建它,没有创建出口或其他麻烦。

然后以编程方式将 WKWebView 添加到 UIView。

所以,碰巧的是,我的应用程序中的 WKWebViews 不会受到 SwiftUI 布局层次结构循环的困扰,并且可以正确显示。

其中之一被编辑或布局更改时,它们不会变成空白。