移动WKWebview框架会导致部分框架无响应

时间:2016-12-22 20:18:08

标签: ios swift xcode webview

我在WKWebView上有一个工具栏。它如下所示。有一些约束将ToolBar置于webview之上(见下文)。 webview如下所示,绘制黑线以分隔工具栏和webview,但不是应用程序的一部分。

enter image description here

在应用程序中的某些页面上,我想删除工具栏。我使用下面的代码来执行此操作:

    let toolBarNF = CGRect(x: 0 , y: -44 , width: toolBar.frame.width , height:44)
    toolBar.frame = toolBarNF

    let webViewNF = CGRect(x: 0 , y: -44 , width: webView.frame.width , height: (originalWHeight + originalTHeight))
    webView.frame = webViewNF

其中originalWHeight是webview的原始高度,originalTheight是工具栏的原始高度。

这产生了以下框架:

enter image description here

我发现的问题是将webview框架移动了44个像素,WKWebview的前44个像素变得无法点击并且没有响应。所以除非你点击它们的底部,否则我的菜单按钮都不会工作。我认为有一些内置于"锁定"对它的响应覆盖,但我对此并不是很了解。它也可能是工具栏覆盖,但我对此并不了解。

另一个重要的事情是,其他地方的按钮似乎在正确的位置工作,这意味着我不需要从它们应该的位置点击44像素。

我尝试过的一件事是使用此视图和应用程序中的其他人使用webView.updateConstraintsIfNeeded()来更新约束,但这并不起作用。

以下是我视图中的约束(这两个视图在容器视图中)

enter image description here

有没有人知道这个或任何可以帮助我的解决方案?先谢谢你了!

1 个答案:

答案 0 :(得分:2)

使用Autolayout

  1. toolbar.Top定位到Top Layout Guide.Bottom
  2. webview.Top定位到toolbar.bottom
  3. 要更改工具栏的位置(及其隐藏状态),请更改约束#1的constant。在本示例中,您需要引用该约束toolbarTopAnchor

    @IBOutlet weak var toolbarTopAnchor: NSLayoutConstraint!
    var toolbarVisible = true
    
    @IBAction func doToggleVisibility(_ sender: Any) {
        toolbarVisible = !toolbarVisible
        toolbarTopAnchor.constant = ((toolbarVisible) ? 0 : -44)
    }
    

    animation
    ↻ replay animation

    进一步的建议

    1. 不要硬编码工具栏的高度

      self.toolbarTopAnchor.constant = ((self.toolbarVisible)
          ? 0
          : -self.toolbar.frame.height) // Not hardcoded
      
    2. 为过渡设置动画

      @IBAction func doToggleVisibility(_ sender: Any) {
          toolbarVisible = !toolbarVisible
          UIView.animate(withDuration: 0.4) { 
              self.toolbarTopAnchor.constant = ((self.toolbarVisible)
                  ? 0
                  : -self.toolbar.frame.height)
              self.view.layoutIfNeeded()
          }
      }
      
    3. 您可能需要在状态栏和工具栏之间插入封面。这是通过Interface Builder中的零行代码实现的。
    4. ►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。