exitoffline 2020-08-09 14:19 采纳率: 0%
浏览 165

如何在SwiftUI中建立一个List View,每个List项是一个WKWebView

我想在SwiftUI里面实现一个List View,其中每一个list项就是一个WKWebView。就像一个论坛的帖子,每个跟帖就是一个list项目,每个跟帖的数据是一个html字符串,可能里面有图片或其他东西。就像这个一样

https://i.stack.imgur.com/A4DvM.png

但是我的代码实现(在最末尾是全部代码)加载速度超级慢。如果往下滑动,好多项目还没加载,如果再往上滑动,加载的项目也没有了。伴随有很多错误。就像这样的

https://i.stack.imgur.com/B9vLZ.png

2020-08-08 22:44:15.493387-0700 WKWebViewTest[2205:76254] WF: === Starting WebFilter logging for process WKWebViewTest 2020-08-08 22:44:15.493682-0700 WKWebViewTest[2205:76254] WF: _userSettingsForUser : (null) 2020-08-08 22:44:15.493865-0700 WKWebViewTest[2205:76254] WF: _WebFilterIsActive returning: NO 2020-08-08 22:44:15.622585-0700 WKWebViewTest[2205:76254] WF: _userSettingsForUser : (null) 2020-08-08 22:44:15.622787-0700 WKWebViewTest[2205:76254] WF: _WebFilterIsActive returning: NO

我不知道究竟如何才能实现这样一个功能。请大神赐教

import SwiftUI
import WebKit

struct ContentView: View {
    init() {
        UITableView.appearance().separatorStyle = .none
        UITableViewCell.appearance().selectionStyle = .none
        UITableViewCell.appearance().backgroundColor = UIColor.clear
        UITableView.appearance().backgroundColor = UIColor.clear
    }

    let htmlText = "<p>This is the paragraph</p>"

    var body: some View {
        List{
            ForEach(0...20, id: \.self) { _ in
                VStack {
                    PostWebView(text: self.htmlText)
                        .frame(height: 50)
                    Divider()
                }
            }
        }
        .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct PostWebView : UIViewRepresentable {
    let text: String

    init(text: String) {
        self.text = text
    }

    class Coordinator: NSObject, WKNavigationDelegate {
        var parent: PostWebView

        init(_ parent: PostWebView) {
            self.parent = parent
        }
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    func makeUIView(context: Context) -> WKWebView  {
        let webview = WKWebView()
        webview.scrollView.bounces = false
        webview.scrollView.isScrollEnabled = false
        webview.navigationDelegate = context.coordinator
        let htmlStart = "<HTML><HEAD><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, shrink-to-fit=no, maximum-scale=1.0, user-scalable=no\"></HEAD><BODY>"
        let htmlEnd = "</BODY></HTML>"
        let postHtml = text
        let htmlString = "\(htmlStart)\(postHtml)\(htmlEnd)"
        webview.loadHTMLString(htmlString, baseURL:  nil)
        return webview
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
    }
}
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-08-10 07:47
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么