SFSafariController 在模拟器中加载 URL 正常,但在设备上留下空白屏幕
SFSafariController loads URL fine in simulator but leaves a blank screen on device
所以我正在使用 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 并删除了我的浏览历史。
刚刚创建了一个示例项目,它可以在模拟器和 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: {
})
}
}
看来您的 URL 或您调用呈现 safari 的方法的方式有问题。将您的代码放到一个单独的方法中,并确保您传递正确 URL。
在我的应用程序中我这样做了:
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
}
而且效果很好
所以我正在使用 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 并删除了我的浏览历史。
刚刚创建了一个示例项目,它可以在模拟器和 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: {
})
}
}
看来您的 URL 或您调用呈现 safari 的方法的方式有问题。将您的代码放到一个单独的方法中,并确保您传递正确 URL。
在我的应用程序中我这样做了:
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
}
而且效果很好