ios - 从 SafariWebController 返回时的 Swift 白屏
问题描述
当我打开一个 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)
}
}
该网站加载正常,当我返回我的应用程序时出现空白屏幕。难道我做错了什么?
解决方案
它工作正常。您刚刚以这种方式创建了新的 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")
这种方式更适合您的解决方案。
推荐阅读
- haskell - 读取haskell中的数字列表
- c - C 和 POSIX 在哪里指定标准头文件必须包含在文件范围内?
- powershell - PowerShell删除lastwrite超过30个项目/文件夹排除多个子文件夹
- javascript - 在 {{}}(大括号)中使用函数调用是一种好习惯吗?
- apache-kafka - Kafka Streams:全局状态存储低级处理器 - 处理方法
- sql-server-2008 - 更新第一个表的哪一列为空,值来自第二个表。两个表具有相同的主键
- gurobi - 如何使用 Gurobi 在 Python 中对图形进行分区?
- python - 使用 Dataframes style.apply 基于比较值突出显示
- oracle - 如何将 2 个字段中的值连接到一个字段中
- vba - 在 VBA 复制图像中查找 Excel 工作表的底部