SFSafariViewController 显示任何 URL 的空白屏幕

Posted

技术标签:

【中文标题】SFSafariViewController 显示任何 URL 的空白屏幕【英文标题】:SFSafariViewController displays empty screen for any URL 【发布时间】:2017-08-11 18:41:38 【问题描述】:

我正在尝试使用 SFSafariViewController 显示 URL。这是我的代码:(topmostController 指向,是的,最顶层的控制器)

SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:url];
[[UIViewController topmostController] presentViewController:safariVc animated:YES completion:nil];

无论我尝试显示的 URL 是什么,我都会收到:

地址栏空白无响应,刷新按钮不做任何事情,底部按钮全部禁用,没有页面,顶部栏布局混乱。

我已经多次尝试使用多个域,但始终相同。我做错了什么?

【问题讨论】:

问题可能是[UIViewController topmostController]的实现。你能把那个贴出来吗?根据我的经验,当您尝试在无法真正呈现的视图控制器上呈现时会发生这种情况(据系统所知) @Dima 因为它只是一个返回最顶层控制器的助手。如果它不起作用,则根本不会显示 Safari 控制器。它正在返回正确的视图控制器(我已经放置了一个断点并经过验证) 这其实不太对。我之前尝试在容器中以自定义方式显示的子视图控制器(即技术上未显示)显示时发生过这种情况。演示文稿似乎有效,但结果与您的屏幕截图相同。从容器中呈现使其工作正常。您是否尝试在包含的视图控制器上呈现?无论如何,您粘贴的代码没有问题,因此问题必须在其他地方。 【参考方案1】:

斯威夫特 4.2:

let safariViewController = SFSafariViewController(url: URL)
view.window?.rootViewController?.present(safariViewController, animated: true)

【讨论】:

【参考方案2】:

请试试这个方法。

1、查看UIApplication.shared.keyWindow

2、该keyWindow上是否存在源ViewController?

3、如果不存在,则对该源窗口执行makeKey()

【讨论】:

你能发布一个完整的例子如何使用它吗?

以上是关于SFSafariViewController 显示任何 URL 的空白屏幕的主要内容,如果未能解决你的问题,请参考以下文章

SFSafariViewController 不是全屏/顶部显示的内容

Swift SFSafariViewController 目前显示空白页

如何让 WKWebView 像 SFSafariViewController 一样全屏显示?

如何快速关闭 SFSafariViewController

Android 相当于 iOS 的 SFSafariViewController

Peek-and-Pop UIView 以显示 SFSafariViewController