Ios SFSafariViewController未全屏显示/顶部显示内容

Ios SFSafariViewController未全屏显示/顶部显示内容,ios,swift,sfsafariviewcontroller,Ios,Swift,Sfsafariviewcontroller,我正在为一个演示制作一个非常简单的应用程序,并尝试使用SFSafariViewController(我需要使用SF与WKWebView进行对比,以便能够访问cookies) 我真的很想为用户提供一些UI按钮,但我一直无法实现 我尝试了这个片段(放在presentViewController()的完成回调中): …在中概述。在他们的情况下,他们试图用一个小视图覆盖重新加载按钮。无论使用何种情况,对我来说,在加载SFSafariViewController时,视图立即消失(我可以看到它一会儿,然后它

我正在为一个演示制作一个非常简单的应用程序,并尝试使用
SFSafariViewController
(我需要使用
SF
WKWebView
进行对比,以便能够访问cookies)

我真的很想为
用户
提供一些
UI按钮
,但我一直无法实现

我尝试了这个片段(放在
presentViewController()
的完成回调中):

…在中概述。在他们的情况下,他们试图用一个小视图覆盖重新加载按钮。无论使用何种情况,对我来说,在加载
SFSafariViewController
时,视图立即消失(我可以看到它一会儿,然后它消失)

我正在考虑在
.OverContext
模式中显示按钮,但是用户将无法与
SFSafariViewController
交互,这也不起作用

这里基本上是我想要的(请原谅粗俗的、快速的模型)…基本上是SafariViewController,上面有一个视图(见下图)…透明度只是为了显示它是在Safari上显示的)


非常感谢您的推荐。

我想好了。。。可能存在一些轻微的竞争条件,阻止了推荐的“绘制矩形”代码按预期工作。我所做的:

  • 子类
    SFSafariWebViewController
  • viewdide
    中,使用绘制任何其他视图元素的
    NSTimer
    实现了轻微延迟
这也帮助我隐藏了状态栏,这给了我一些问题(见模型)

以下是相关代码:

import UIKit
import SafariServices

class MySafariVC: SFSafariViewController {

    override func viewDidLoad() {
         super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        var frame = self.view.frame
        let OffsetY: CGFloat  = 44
        frame.origin = CGPoint(x: frame.origin.x, y: frame.origin.y - OffsetY)
        frame.size = CGSize(width: frame.width, height: frame.height + (1 * OffsetY))
        self.view.frame = frame

        NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "drawNavBar", userInfo: nil, repeats: false)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("i laid out my subviews")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    func drawNavBar() {
        let height: CGFloat = 44
        let y: CGFloat = self.view.frame.height - height

        // It can be any overlay. May be your logo image here inside an imageView.
        let overlay = UIView(frame: CGRect(x: 0, y: y, width: self.view.frame.width, height: height))
        overlay.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.9)
        self.view.addSubview(overlay)
    }
}

Wkwebview对您隐藏cookies?
import UIKit
import SafariServices

class MySafariVC: SFSafariViewController {

    override func viewDidLoad() {
         super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        var frame = self.view.frame
        let OffsetY: CGFloat  = 44
        frame.origin = CGPoint(x: frame.origin.x, y: frame.origin.y - OffsetY)
        frame.size = CGSize(width: frame.width, height: frame.height + (1 * OffsetY))
        self.view.frame = frame

        NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "drawNavBar", userInfo: nil, repeats: false)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("i laid out my subviews")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    func drawNavBar() {
        let height: CGFloat = 44
        let y: CGFloat = self.view.frame.height - height

        // It can be any overlay. May be your logo image here inside an imageView.
        let overlay = UIView(frame: CGRect(x: 0, y: y, width: self.view.frame.width, height: height))
        overlay.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.9)
        self.view.addSubview(overlay)
    }
}