所以我使用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: 我创建了一个新项目来纯粹测试下面提到的代码,可能会发现一个新的错误。这就是我发现的 - 并且想知道如何解决。
更新: 我更新到10.3.3并删除了我的浏览历史记录。
答案 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
}
它完美无缺