【问题标题】:Simplest webview app in iOS - fail to runiOS 中最简单的 webview 应用程序 - 无法运行
【发布时间】:2021-03-14 16:44:33
【问题描述】:

我正在尝试制作一个简单地打开 URL 的 ios 应用程序。所以基本上是一个 webview 应用程序。我正在使用 XCode 12.4,这就是我所做的:

  1. 创建新项目->iOS App -->(见下图)
  2. 新建文件:ViewController.swift -->
import WebKit
class WebViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!
    
    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "https://developer.apple.com")!
        webView.load(URLRequest(url: url))
    }
}
  1. 构建并运行。

问题是应用程序继续在“Hello World”上打开,我想原因是MyappApp.swift 文件调用ContentView 而不是ViewController

import SwiftUI

@main
struct myappApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

我该如何解决这个问题?

免责声明:这是我的第一个 iOS 应用,我对 iOS 开发知之甚少。

【问题讨论】:

  • 看起来您正在创建一个 SwiftUI 应用程序,而不是使用 UIKit 创建一个应用程序。我建议尝试创建一个应用程序,但选择(在您显示的第一张图片中)界面作为情节提要。然后您应该能够在该项目中创建的默认 ViewController 类中工作。
  • 我试过了,但是当compaling时,应用程序中的屏幕仍然是白色的
  • 显然你做错了什么,我建议你按照这个教程hackingwithswift.com/read/4/overview

标签: ios swift webview ios-web-app


【解决方案1】:

您非常接近...将您的 WebViewController 包裹在 UIViewControllerRepresentable 中以使其与 SwiftUI 兼容

import SwiftUI
struct WebView_UI: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> some UIViewController {
        let vc = WebViewController()
        return vc
    }
    func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
        
    }
}

然后在 SwiftUI struct 中引用您的新 SwiftUI UIViewControllerRepresentable。比如……

struct myappApp: App {
    var body: some Scene {
        WindowGroup {
            WebView_UI()
        }
    }
}

或者……

struct ContentView: View {
    var body: some View {
        VStack{
            Text("Hello World!").padding()
            WebView_UI()
        }
    }
}

【讨论】:

  • 嘿@lorem ipsum,我对您发布的代码的第一部分有疑问。我也应该添加哪个文件?我尝试将其添加到 viewcontroller.swift 但出现错误:Cannot find type 'UIViewControllerRepresentable' in scope
  • 任何文件。只需确保您的 import SwiftUI 在文件顶部即可。现在你在那个文件中只有import WebKit
  • 看来您对此很陌生,我建议您至少运行一次Apple SwiftUI tutorials 以开始使用。
  • 你弄明白了吗?
  • 成功了!我现在需要进行一些更改,我没有意识到它会在没有导航 UI 的情况下打开
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多