Swift 从 SafariWebController 返回时出现白屏

Swift White Screen upon returning from SafariWebController

当我打开一个 safari 视图控制器然后 return 我的应用程序时(当按下 "Done" 时),我的应用程序呈现 blank/white 屏幕而不是该视图的内容.

下面的代码是我在空视图中尝试使用的代码 - 无论我在我的应用程序中的什么地方尝试,这个问题都会发生。

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)
    }

}

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

它工作正常。 您刚刚通过这种方式创建了新的 UIViewController,默认情况下 UIViewController 具有黑色背景。因此,当您按下完成时,您只是从 SafariViewController 返回到您已保存ViewController (UIViewController)。 可能您正在寻找 UIWebView 解决方案 https://developer.apple.com/documentation/uikit/uiwebview。 如果你只想显示 SafariViewController 将它作为你 ViewController 的功能,你不需要使用 UIViewController class 创建新文件来做到这一点。

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")

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