1

我正在为演示制作一个非常简单的应用程序,并尝试使用SFSafariViewController(我需要使用SF而不是WKWebView这样才能访问 cookie)来呈现网页。

我真的很想介绍User一些UI buttons,但我一直无法完成。

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

let width: CGFloat = 66
let x: CGFloat = self.view.frame.width - width

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

...在这篇文章中概述。在他们的案例中,他们试图用一个小视图覆盖重新加载按钮。无论用例如何,对我来说,加载时视图会立即消失SFSafariViewController(我可以看到它一会儿然后消失)。

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

这基本上就是我所追求的(请原谅粗暴的快速模型)......基本上,SafariViewController 上面显示了一个视图(见底部)......透明度只是为了表明它是在 Safari 上呈现的)。

在此处输入图像描述

非常感谢任何建议。

4

1 回答 1

1

想通了......可能有一些轻微的竞争条件正在阻止推荐的“绘制矩形”代码按预期工作。我做了什么:

  • 子类化SFSafariWebViewController
  • 在中,使用绘制任何额外的视图元素viewDidAppear实现了轻微的延迟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)
    }
}
于 2016-03-10T23:00:50.167 回答