从 SafariWebController 返回时的 Swift 白屏
Posted
技术标签:
【中文标题】从 SafariWebController 返回时的 Swift 白屏【英文标题】:Swift White Screen upon returning from SafariWebController 【发布时间】:2019-12-09 10:39:51 【问题描述】:当我打开一个 safari 视图控制器然后返回到我的应用程序时(当按下“完成”时),我的应用程序呈现一个空白/白色屏幕而不是该视图的内容。
下面的代码是我尝试在空视图中使用的代码 - 无论我在应用程序的哪个位置尝试,都会出现问题。
import UIKit
import SafariServices
class SavedViewController: UIViewController, SFSafariViewControllerDelegate
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
if let link = URL(string: "https://google.com")
let myrequest = SFSafariViewController(url: link)
myrequest.delegate = self
present(myrequest, animated:true)
func safariViewControllerDidFinish(_ controller: SFSafariViewController)
dismiss(animated:true, completion: nil)
网站加载正常,当我返回我的应用程序时出现空白屏幕。我是不是做错了什么?
【问题讨论】:
【参考方案1】:它工作正常。 您刚刚以这种方式创建了新的 UIViewController,默认情况下 UIViewController 具有黑色背景。因此,当您按下 Done 时,您只是从 SafariViewController 回到 SavedViewController (UIViewController)。 可能您正在寻找 UIWebView 解决方案https://developer.apple.com/documentation/uikit/uiwebview。 如果您只想显示 SafariViewController,请将其作为 ViewController 的功能,您无需使用 UIViewController 类创建新文件即可。
import UIKit
import SafariServices
class SavedViewController: UIViewController, SFSafariViewControllerDelegate
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = .gray
setupViews()
func safariViewControllerDidFinish(_ controller: SFSafariViewController)
dismiss(animated:true, completion: nil)
private func setupViews()
view.addSubview(openSafariButton)
openSafariButton.addTarget(self, action: #selector(handleOpenSafariButtonTap), for: .touchUpInside)
openSafariButton.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 60)
@objc func handleOpenSafariButtonTap()
if let link = URL(string: "https://google.com")
let myrequest = SFSafariViewController(url: link)
myrequest.delegate = self
present(myrequest, animated:true)
let openSafariButton: UIButton =
let button = UIButton()
button.setTitle("openSafari", for: .normal)
button.setTitleColor(.black, for: .normal)
button.backgroundColor = .red
return button
()
这就是我的意思。
您可以添加功能:
private func openSafariLink(link: String)
if let link = URL(string: link)
let myrequest = SFSafariViewController(url: link)
present(myrequest, animated:true)
然后从任何这样的地方调用它:
openSafariLink(link: "https://google.com")
这种方式更适合您的解决方案。
【讨论】:
我没有提到黑色背景 - 我看到的是白色。我的 UIViewController 中有内容,为什么不显示?我需要“完成”功能,因为我的应用程序打开了外部链接,但它应该能够直接返回到应用程序中——SafariViewController 默认允许这样做,那么我为什么要重新发明***呢?另外,您链接的内容已被弃用。 您提供源代码。因为它是新的 ViewController,所以在 ViewDidLoad 上打开 SafariViewController。我的意思是您应该将代码作为函数调用,而不是打开新的 ViewController 并从 ViewDidLoad 调用它 你我知道 UIWebView 已被弃用,我只是提供它作为一种解决方案,所以你可以让我们知道你在寻找什么。 (你看到白色背景,因为你可能是通过故事板添加的) 如果我想在 tableviewcontroller 中使用它,这种行为是否仍能按预期工作,还是需要将它们彼此分开? 它应该可以正常工作。你可以在 button tap 或 didselect tableView 方法上使用它,我将提供一些额外的代码,所以在答案中,它会更简单。以上是关于从 SafariWebController 返回时的 Swift 白屏的主要内容,如果未能解决你的问题,请参考以下文章