如何使WKWebView像SFSafariViewController一样全屏?

问题描述 投票:0回答:1

我有一个TableView,其中包含了一个Web URL列表,我想打开一个浏览器,导航到被选中的URL,但是有一些自定义功能。我想打开一个浏览器,导航到被选中的网址,但有一些自定义功能。当我使用 "SafariViewController "时,我想打开一个浏览器,导航到被选中的网址,但又有一些自定义功能。SFSafariViewController我得到的是全屏浏览器。然而,当我使用 WKWebViewController,我得到的模式,你向下滑动解雇。

我如何得到 WKWebView 来全屏显示,而不是像模态一样?

使用 SFSafariViewController:

class ShoppingViewController: UITableViewController {

    ...

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        showRetailerHome(indexPath: indexPath)
    }

    func showHome(indexPath: IndexPath){

        ...

        if let url = URL(string: urlString){
            let config = SFSafariViewController.Configuration()
            let vc = SFSafariViewController(url: url, configuration: config)
            present(vc, animated: true)
        }        
    }

结果。

enter image description here

使用 WKWebViewController:

class ShoppingViewController: UITableViewController {

    ...

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        showRetailerHome(indexPath: indexPath)
    }

    func showHome(indexPath: IndexPath){

        let customWebController = WKBrowserController()
        present(customWebController, animated: true)

    }

负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: WKBrowserController:

class WKBrowserController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        self.view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "https://www.amazon.com")!
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = true
    }
}

结果。

enter image description here

swift uikit wkwebview sfsafariviewcontroller
1个回答
1
投票

当你用全屏呈现一个viewcontroller时。你可以将它设置为.fullscreen

试试吧

let customWebController = WKBrowserController()
customWebController.modalPresentationStyle = .fullScreen
present(customWebController, animated: true)

0
投票
class WKBrowserController: UIViewController, WKNavigationDelegate {

    var Activity: UIActivityIndicatorView!

    var webView = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()
        Activity = UIActivityIndicatorView()
        Activity.center = view.center
        view.addSubview(Activity)

        guard let url = URL(string: "your-url-string") else { return }
        webView = WKWebView(frame: self.view.frame)
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.isUserInteractionEnabled = true
        webView.navigationDelegate = self
        view.addSubview(webView)
        let request = URLRequest(url: url)
        webView.load(request)

        webView.addSubview(Activity)
        Activity.startAnimating()
        webView.navigationDelegate = self
        Activity.hidesWhenStopped = true
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if navigationAction.navigationType == .linkActivated  {
            if let url = navigationAction.request.url,
                let host = url.host, !host.hasPrefix("your-url-string"),
                UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url)
                print(url)
                print("Redirected to browser. No need to open it locally")
                decisionHandler(.cancel)
            } else {
                //print("Open it locally")
                decisionHandler(.allow)
            }
        } else {
            //print("not a user click")
            decisionHandler(.allow)
        }
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        Activity.stopAnimating()
    }

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        Activity.stopAnimating()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.