Swift 从 SafariWebController 返回时出现白屏
Swift White Screen upon returning from SafariWebController
当我打开一个 safari 视图控制器然后 return 我的应用程序时(当按下 "Done" 时),我的应用程序呈现 blank/white 屏幕而不是该视图的内容.
下面的代码是我在空视图中尝试使用的代码 - 无论我在我的应用程序中的什么地方尝试,这个问题都会发生。
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)
}
}
网站加载正常,当我 return 我的应用程序出现空白屏幕时。我做错了什么吗?
它工作正常。
您刚刚通过这种方式创建了新的 UIViewController,默认情况下 UIViewController 具有黑色背景。因此,当您按下完成时,您只是从 SafariViewController 返回到您已保存ViewController (UIViewController)。
可能您正在寻找 UIWebView 解决方案 https://developer.apple.com/documentation/uikit/uiwebview。
如果你只想显示 SafariViewController 将它作为你 ViewController 的功能,你不需要使用 UIViewController class 创建新文件来做到这一点。
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")
这种方式更适合您的解决方案。
当我打开一个 safari 视图控制器然后 return 我的应用程序时(当按下 "Done" 时),我的应用程序呈现 blank/white 屏幕而不是该视图的内容.
下面的代码是我在空视图中尝试使用的代码 - 无论我在我的应用程序中的什么地方尝试,这个问题都会发生。
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)
}
}
网站加载正常,当我 return 我的应用程序出现空白屏幕时。我做错了什么吗?
它工作正常。 您刚刚通过这种方式创建了新的 UIViewController,默认情况下 UIViewController 具有黑色背景。因此,当您按下完成时,您只是从 SafariViewController 返回到您已保存ViewController (UIViewController)。 可能您正在寻找 UIWebView 解决方案 https://developer.apple.com/documentation/uikit/uiwebview。 如果你只想显示 SafariViewController 将它作为你 ViewController 的功能,你不需要使用 UIViewController class 创建新文件来做到这一点。
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")
这种方式更适合您的解决方案。