首页 > 解决方案 > 从 SafariWebController 返回时的 Swift 白屏

问题描述

当我打开一个 safari 视图控制器然后返回到我的应用程序时(当按下“完成”时),我的应用程序呈现一个空白/白色屏幕而不是该视图的内容。

下面的代码是我尝试在空视图中使用的代码 - 无论我在我的应用程序中的哪个位置尝试,都会出现问题。

import UIKit
import SafariServices

class SavedViewController: UIViewController, SFSafariViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if let link = URL(string: "https://google.com"){
            let myrequest = SFSafariViewController(url: link)
            myrequest.delegate = self
            present(myrequest, animated:true)
        }
    }

    func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
        dismiss(animated:true, completion: nil)
    }

}

该网站加载正常,当我返回我的应用程序时出现空白屏幕。难道我做错了什么?

标签: iosswiftsfsafariviewcontroller

解决方案


它工作正常。您刚刚以这种方式创建了新的 UIViewController,默认情况下 UIViewController 具有黑色背景。因此,当您按下 Done 时,您只是从 SafariViewController 回到 SavedViewController (UIViewController)。可能您正在寻找 UIWebView 解决方案https://developer.apple.com/documentation/uikit/uiwebview。如果您只想显示 SafariViewController 作为 ViewController 的功能,则无需使用 UIViewController 类创建新文件即可。

import UIKit
import SafariServices

class SavedViewController: UIViewController, SFSafariViewControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    view.backgroundColor = .gray
    setupViews()
}

func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
    dismiss(animated:true, completion: nil)
}

private func setupViews(){
    view.addSubview(openSafariButton)
    openSafariButton.addTarget(self, action: #selector(handleOpenSafariButtonTap), for: .touchUpInside)
    openSafariButton.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 60)
}

@objc func handleOpenSafariButtonTap(){
    if let link = URL(string: "https://google.com"){
        let myrequest = SFSafariViewController(url: link)
        myrequest.delegate = self
        present(myrequest, animated:true)
    }
}

let openSafariButton: UIButton = {
    let button = UIButton()
    button.setTitle("openSafari", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.backgroundColor = .red
    return button
}()

}

这就是我的意思。

您可以添加功能:

    private func openSafariLink(link: String){
    if let link = URL(string: link){
        let myrequest = SFSafariViewController(url: link)
        present(myrequest, animated:true)
    }
}

并从这样的任何地方调用它:

openSafariLink(link: "https://google.com")

这种方式更适合您的解决方案。


推荐阅读