在 UIWebview 之类的 ViewController 中使用 SafariViewController

Posted

技术标签:

【中文标题】在 UIWebview 之类的 ViewController 中使用 SafariViewController【英文标题】:Use SafariViewController inside a ViewController like UIWebview 【发布时间】:2016-09-23 18:02:18 【问题描述】:

我想使用 Safari cookie 来验证我的应用的用户。我可以用 SFSafariViewController 做到这一点。但问题是我的应用程序中有 UIWebView 来显示一些信息。即使用户使用 safari 登录,他们也会被要求通过 UIWebView 再次登录。我想同步这个。意味着如果用户通过 safari 登录,他不应该在应用程序中再次登录。我知道 safari 和 uiwebview 不共享 cookie,所以我想将所有内容移至 safari。是否可以在视图控制器中显示 safari?

谢谢, 里查

【问题讨论】:

【参考方案1】:

PopoverViewController 方法

    let vc = SFSafariViewController(url: URL, entersReaderIfAvailable:false)
    vc.modalPresentationStyle = .popover
    vc.preferredContentSize = CGSize(width: self.view.frame.width/2, height: self.view.frame.height/2) // Or put any size
    if let popover = vc.popoverPresentationController 
        popover.sourceView = self.view // You can also put the source button
        popover.permittedArrowDirections = .any
        popover.sourceRect = CGRect(x: 0, y: 0, width: 85, height: 30)
        popover.delegate = self
        self.present(vc, animated: true, completion: nil)
    

然后声明这个子类:

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate

但这仅适用于 iPad,所以这样说:

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle 
    return .none

Result

【讨论】:

以上是关于在 UIWebview 之类的 ViewController 中使用 SafariViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView Href 链接空间问题

iPhone - UIPickerView 和 UIWebView 上的手势

播放音频时设置自定义元数据(控制中心、锁屏...)

UIWebView 从本地文件系统加载 HTML 文件

iOS Swift 如何告诉 UIView 控制器我们通过 NSURLProtocol 对象接收到信息

iOS - 在 WebView 中清除返回缓存