SFSafariViewController 不是全屏/顶部显示的内容
Posted
技术标签:
【中文标题】SFSafariViewController 不是全屏/顶部显示的内容【英文标题】:SFSafariViewController NOT fullscreen / content presented on top 【发布时间】:2016-03-10 22:32:04 【问题描述】:我正在为演示制作一个非常简单的应用程序,并尝试使用 SFSafariViewController
呈现网页(我需要使用 SF
与 WKWebView
以便能够访问 cookie)。
我真的很想向User
展示一些UI buttons
,但我无法完成。
我试过这个sn-p(放在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)
...在this post 中进行了概述。在他们的案例中,他们试图用一个小视图覆盖重新加载按钮。无论用例如何,对我来说,当我加载 SFSafariViewController
时,视图会立即消失(我可以看到它一会儿然后消失)。
我正在考虑在 .OverContext
模式中显示按钮,但是用户将无法与 SFSafariViewController
交互,这也不起作用。
这基本上是我所追求的(请原谅粗俗的快速模型)......基本上,SafariViewController 上面显示了一个视图(见底部)......透明度只是为了表明它正在通过 Safari 呈现) .
非常感谢任何建议。
【问题讨论】:
Wkwebview 对您隐藏 cookie? 【参考方案1】:想通了......可能有一些轻微的竞争条件正在阻止推荐的“绘制矩形”代码按预期工作。我做了什么:
子类SFSafariWebViewController
在viewDidAppear
中,使用NSTimer
实现了轻微的延迟,该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)
【讨论】:
以上是关于SFSafariViewController 不是全屏/顶部显示的内容的主要内容,如果未能解决你的问题,请参考以下文章
SFSafariViewController 在导航栏和底部工具栏中是不是始终具有相同的 UI 元素?
SfSafariViewController 和共享 cookie 存储
使用 SFSafariViewController 下载文档