SFSafariViewController加载空白页面

时间:2016-09-23 13:51:08

标签: ios swift ios10 sfsafariviewcontroller

我正在使用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是其他人遇到的完全相同问题的链接

3 个答案:

答案 0 :(得分:8)

尝试评论你正在做的任何加载动画,并尝试不用它。

...
    // self.showHUD()
    //  self.hideHUD()
...

这是因为在安全修复过程中引入了iOS 10中的一个错误,当使用进度条和加载器作为主window

上方的window添加时,不会让safariViewController加载

我真的希望Apple记录下这一变化。 我不得不在我当前的应用程序中注释掉加载指示器以使其正常工作。

答案 1 :(得分:3)

遇到这个问题,看到了我在尝试使用SafariViewController时遇到的一些类似问题。当弹出窗口出现时,跟踪我的问题直到使用SafariViewController。已经汇总了一些代码来展示我的问题和可能的解决方案。

enter image description here

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