我在WKWebView上有一个工具栏。它如下所示。有一些约束将ToolBar置于webview之上(见下文)。 webview如下所示,绘制黑线以分隔工具栏和webview,但不是应用程序的一部分。
在应用程序中的某些页面上,我想删除工具栏。我使用下面的代码来执行此操作:
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
是工具栏的原始高度。
这产生了以下框架:
我发现的问题是将webview框架移动了44个像素,WKWebview的前44个像素变得无法点击并且没有响应。所以除非你点击它们的底部,否则我的菜单按钮都不会工作。我认为有一些内置于"锁定"对它的响应覆盖,但我对此并不是很了解。它也可能是工具栏覆盖,但我对此并不了解。
另一个重要的事情是,其他地方的按钮似乎在正确的位置工作,这意味着我不需要从它们应该的位置点击44像素。
我尝试过的一件事是使用此视图和应用程序中的其他人使用webView.updateConstraintsIfNeeded()
来更新约束,但这并不起作用。
以下是我视图中的约束(这两个视图在容器视图中)
有没有人知道这个或任何可以帮助我的解决方案?先谢谢你了!
答案 0 :(得分:2)
toolbar.Top
定位到Top Layout Guide.Bottom
webview.Top
定位到toolbar.bottom
要更改工具栏的位置(及其隐藏状态),请更改约束#1的constant
。在本示例中,您需要引用该约束toolbarTopAnchor
:
@IBOutlet weak var toolbarTopAnchor: NSLayoutConstraint!
var toolbarVisible = true
@IBAction func doToggleVisibility(_ sender: Any) {
toolbarVisible = !toolbarVisible
toolbarTopAnchor.constant = ((toolbarVisible) ? 0 : -44)
}
不要硬编码工具栏的高度
self.toolbarTopAnchor.constant = ((self.toolbarVisible)
? 0
: -self.toolbar.frame.height) // Not hardcoded
为过渡设置动画
@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()
}
}
►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。