SFSafariController在模拟器中加载URL很好,但在设备上留下了空白屏幕

时间:2017-08-12 06:07:33

标签: swift ios-simulator ios10 is-empty sfsafariviewcontroller

所以我使用SFSafariController加载从cloudkit下载的URL,就像这样。

    if let yelpurl = detail.value(forKey: "Yelp") as? String
    {

        let url = URL(string:  (yelpurl))
        let safari = SFSafariViewController(url: url!, entersReaderIfAvailable: false)
        safari.delegate = self as? SFSafariViewControllerDelegate
        self.present(safari, animated: true, completion: {

        })
    } else {
    }

}

代码本身很好 - 没有错误,拉出yelp页面URL并将其加载到模拟器中的SFSafariController中,但在我的设备上,我留下了一个白色的空白屏幕。造成这种差异的原因是什么?我如何在设备上更正此问题?

要添加,plist仍然没有任何修改。

编辑1: 我创建了一个新项目来纯粹测试下面提到的代码,可能会发现一个新的错误。这就是我发现的 - 并且想知道如何解决。 enter image description here

更新: 我更新到10.3.3并删除了我的浏览历史记录。

2 个答案:

答案 0 :(得分:1)

刚刚创建了一个示例项目,它适用于模拟器和iPhone 6S iOS 10.3.2,代码:

import UIKit
import SafariServices

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let deadlineTime = DispatchTime.now() + .seconds(1)
        DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
            self.showLinksClicked()
        }

    }

    func showLinksClicked() {

        let yelpurl = "https://google.com"
        let url = URL(string:  (yelpurl))
        let safari = SFSafariViewController(url: url!, entersReaderIfAvailable: false)
        safari.delegate = self as? SFSafariViewControllerDelegate
        self.present(safari, animated: true, completion: {
        })
    }
}

因此,您的网址或您调用方法来呈现Safari的方式看起来有问题。将您的代码放在一个单独的方法中,并确保您传递正确的URL。

答案 1 :(得分:1)

在我的应用上,我这样做了:

import UIKit
import SafariServices

class ViewController: UIViewController, SFSafariViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()


        }

    }

    func linkIsClicked(){

       let safariVC = SFSafariViewController(url: NSURL(string: "your url")! as URL)
        self.present(safariVC, animated: true, completion: nil)
        safariVC.delegate = self
}

它完美无缺