让 WKWebView 覆盖整个屏幕
Posted
技术标签:
【中文标题】让 WKWebView 覆盖整个屏幕【英文标题】:Make WKWebView cover the whole screen 【发布时间】:2019-02-26 09:49:39 【问题描述】:我有一个想要覆盖整个屏幕的 WKWebView。在没有物理主页按钮的较新设备上,ios 在“主页栏”下添加了一个白色区域。我试图覆盖safeAreaInsets
女巫工作正常,使内容进入“homebar”,但我喜欢将顶部参数保持为其默认值。这是因为我在顶部有一个导航栏,可以隐藏或显示女巫。设置 UIEdgeInsets(top: 0...
会使 WKWebView 位于我的导航栏后面(显然)。
是否只覆盖left
、bottom
和right
?
import Foundation
import WebKit
class FullScreenWKWebView: WKWebView
override var safeAreaInsets: UIEdgeInsets
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
谢谢!
【问题讨论】:
【参考方案1】:所以我想通了,男孩,我错了。事实证明,约束不是问题,而是 WKWebView 如何在安全区域呈现页面。我发现我的 WKWebView 覆盖了整个屏幕,但没有在主栏/凹槽下呈现背景。深绿色是在 html 中定义的。
我的解决方案是禁用 WKWebViews bultin 调整。
webView.scrollView.contentInsetAdjustmentBehavior = .never
我还为我的 WKWebView 创建了两个具有不同优先级的顶部约束。一个到 safeArea,一个到 superView。然后我在导航栏可见时更改代码中的优先级,以便页面不会在导航栏下呈现。
结果: 对 superView 有限制
对安全区域有限制
【讨论】:
【参考方案2】:你不能使用自动布局来解决这个问题,通过将 webview 固定到超级视图或安全区域,这取决于你想要什么?
无论如何,你可能会做这样的事情:
override var safeAreaInsets: UIEdgeInsets
let insets = super.safeAreaInsets
return UIEdgeInsets(top: insets.top, left: 0, bottom: 0, right: 0)
【讨论】:
将 WKWebView 固定到它的超级视图仍然将我限制在安全区域。设置top: insets.top
不起作用。【参考方案3】:
我不建议直接覆盖任何UIView
的safeAreaInsets
,因为它可能会导致您自己提到的意外行为。
这些
safeAreaInsets
是在更高的UIViewController
级别上生成的,因此应该在那里处理。
我宁愿建议如下:
将此代码添加到将保存您的FullScreenWKWebView
的UIViewController
。
override func viewWillLayoutSubviews()
super.viewWillLayoutSubviews()
additionalSafeAreaInsets.bottom -= bottomLayoutGuide.length
这样您将保留原始UIViewController
的safeAreaInsets
并简单地为原始添加所需的修饰符。允许在任何阶段进行修改。
【讨论】:
以上是关于让 WKWebView 覆盖整个屏幕的主要内容,如果未能解决你的问题,请参考以下文章
WKWebView的evaluateJavascript方法的completionHandler运行在啥线程上?
带有 WKWebView 单元格的滚动 UICollectionView 的 UITableView
在 iOS 9 中遇到 WKWebview 和 UIWebView 问题