【问题标题】:How can I properly place a UIButton on top of a loaded SFSafariViewController?如何在加载的 SFSafariViewController 上正确放置 UIButton?
【发布时间】:2017-08-17 02:32:54
【问题描述】:

我阅读了很多关于 SFSafariViewController 的文章,我相信它在 iOS 应用程序中提供了出色的功能。但是,当我加载我的 SFSafariViewController 时,我故意隐藏导航栏,因为我希望左上角有一个自定义固定按钮来关闭视图控制器。

    override func viewDidAppear(_ animated: Bool) {
    let safariViewController = PSSafariViewController(url: URL(string: blogUrl)!, entersReaderIfAvailable: true)
    present(safariViewController, animated: false) {
        var frame = safariViewController.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 + OffsetY)
        safariViewController.view.frame = frame
        let btn: UIButton = UIButton(frame: CGRect(x: 100, y: 400, width: 100, height: 50))
        btn.backgroundColor = UIColor.green
        btn.setTitle("Click Me", for: .normal)
        btn.addTarget(self, action: #selector(PSBlogViewController.buttonAction), for: UIControlEvents.touchUpInside)
        btn.tag = 1 // change tag property
        btn.isOpaque = true
        safariViewController.view.addSubview(btn)
        safariViewController.view.bringSubview(toFront: btn)
        print(btn.description)
    }
}

如您所见,我更改了框架,使顶部的栏不可见。该代码运行良好。但是当我尝试添加 UIButton 时,它会短暂出现,然后在我运行应用程序时被覆盖。这是一个使用 SFSafariViewController 的简单博客阅读器应用程序。也许 Apple 不希望开发人员到处乱跑,但非常感谢任何使按钮保持可见的解决方案或变通方法!

这里是关于按钮的信息:0x7f950b618db0;帧 = (100 400; 100 50);标签 = 1;层=CALayer:0x60000023ab60

【问题讨论】:

    标签: ios swift xcode uibutton


    【解决方案1】:

    您为什么不使用其他 WebView 类之一来获得您想要的额外功能?

    5.1.1 (iv) 必须使用 SafariViewContoller 以可视方式向用户呈现信息;控制器不得隐藏或被 其他视图或图层。此外,应用程序可能无法使用 SafariViewController 在用户不知情的情况下跟踪用户 同意。

    【讨论】:

      【解决方案2】:

      Apple 不希望SFSafariViewController 被遮盖,这是事实。但是,我确实发现当我展示它时,我可以在完成块中添加一个按钮,导致问题的是我必须像这样增加按钮视图层的zPosition

          present(safariViewController, animated: false) {
                      var frame = safariViewController.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 + OffsetY)
                      safariViewController.view.frame = frame
                      self.btn = UIButton(frame: CGRect(x: 5, y: 50, width: 50, height: 50))
                      self.btn.layer.cornerRadius = 25
                      self.btn.backgroundColor = UIColor(red: 0, green: 170/255, blue: 240/255, alpha: 0.5)
                      self.btn.setTitle("←", for: .normal)
                      self.btn.addTarget(self, action: #selector(safariViewController.buttonAction(sender:)), for: .touchUpInside)
                      self.btn.tag = 1 // change tag property
                      self.btn.isOpaque = true
                      safariViewController.view.addSubview(self.btn)
                      safariViewController.view.bringSubview(toFront: self.btn)
                      self.btn.layer.zPosition = safariViewController.view.layer.zPosition + 1
                      for subview in safariViewController.view.subviews {
                          subview.isUserInteractionEnabled = false
                      }
                      self.btn.isEnabled = true
                      self.btn.isUserInteractionEnabled = true
                      //print(self.btn.description)
                  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 2012-09-23
        • 1970-01-01
        相关资源
        最近更新 更多