我正在使用SFSafariViewController在我的iOS应用程序中打开一个URL ..它在iOS 9上完美运行但是在将我的设备更新到iOS 10之后,它只是在地址栏中加载了一个没有URL的空白页面。在控制器出现后,即使 safariViewController(控制器:SFSafariViewController,didCompleteInitialLoad didLoadSuccessfully:Bool)也没有被调用。
我在视图控制器中导入了它:
import SafariServices
代码:
let url = NSURL(string: urlString)!
if #available(iOS 9.0, *) {
let safariVC = SFSafariViewController(URL: url)
safariVC.delegate = self
self.presentViewController(safariVC, animated: true, completion: {
self.hideHUD()
})
} else {
// Fallback code
}
here是其他人遇到的完全相同问题的链接
答案 0 :(得分:8)
尝试评论你正在做的任何加载动画,并尝试不用它。
...
// self.showHUD()
// self.hideHUD()
...
这是因为在安全修复过程中引入了iOS 10中的一个错误,当使用进度条和加载器作为主window
window
添加时,不会让safariViewController加载
我真的希望Apple记录下这一变化。 我不得不在我当前的应用程序中注释掉加载指示器以使其正常工作。
答案 1 :(得分:3)
遇到这个问题,看到了我在尝试使用SafariViewController时遇到的一些类似问题。当弹出窗口出现时,跟踪我的问题直到使用SafariViewController。已经汇总了一些代码来展示我的问题和可能的解决方案。
ViewController.swift:
import UIKit
protocol PopButtonPressedProtocol : class {
func popButtonPressed(_ button: UIButton) // protocol:
}
class PopVC: UIViewController {
@IBOutlet weak var btnBad: UIButton!
@IBOutlet weak var btnGood: UIButton!
weak var delegate : PopButtonPressedProtocol?
func buttonPressed(_ button: UIButton) {
delegate?.popButtonPressed(button)
}
override func viewDidLoad() {
super.viewDidLoad()
btnBad.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside)
btnGood.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside)
}
}
PopVC.swift:
new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Expanded(
child: yourFirstContentWidget,
),
new Expanded(
child: yourNextContentWidget,
),
new Expanded(
child: yourLastContentWidget,
)
]
)
答案 2 :(得分:0)
Swift 5.2,Xcode 11.4
我有类似的问题,我正在做的是呈现UIAlertViewController并按其按钮操作出现了SFSafariController...。此代码在iOS 13上运行良好,但iOS 12出现了问题...。在呈现SFSafariController之前先关闭UIAlertViewController。希望这可以帮助。 否则快速解决方案将是使用UIApplication.shared.openURL()