Ios 使WKWebView覆盖整个屏幕

Ios 使WKWebView覆盖整个屏幕,ios,swift,constraints,wkwebview,safearealayoutguide,Ios,Swift,Constraints,Wkwebview,Safearealayoutguide,我有一个WKWebView,我想覆盖整个屏幕。在没有物理主页按钮的较新设备上,iOS在“主页栏”下添加了一个白色区域。我试图覆盖safeAreaInsets开关,使内容位于“homebar”下,但我希望将顶部参数保持为其默认值。这是因为我在顶部有一个导航栏,可以隐藏或显示。设置UIEdgeInsets(顶部:0…使WKWebView位于我的导航栏后面(显然) 是否只覆盖左侧、底部和右侧 导入基础 导入WebKit 类FullScreenWKWebView:WKWebView{ 覆盖var安全区域

我有一个WKWebView,我想覆盖整个屏幕。在没有物理主页按钮的较新设备上,iOS在“主页栏”下添加了一个白色区域。我试图覆盖
safeAreaInsets
开关,使内容位于“homebar”下,但我希望将顶部参数保持为其默认值。这是因为我在顶部有一个导航栏,可以隐藏或显示。设置
UIEdgeInsets(顶部:0…
使WKWebView位于我的导航栏后面(显然)

是否只覆盖左侧、
底部
和右侧

<代码>导入基础 导入WebKit 类FullScreenWKWebView:WKWebView{ 覆盖var安全区域插图:UIEdgeInsets{ 返回UIEDGEINSET(顶部:0,左侧:0,底部:0,右侧:0) } }
谢谢!

您不能使用自动布局解决这个问题,根据您的需要将webview固定到superview或安全区域吗

不管怎样,您可能可以这样做:

override var safeAreaInsets: UIEdgeInsets {
    let insets = super.safeAreaInsets
    return UIEdgeInsets(top: insets.top, left: 0, bottom: 0, right: 0)
}

我不建议直接覆盖任何
UIView
safeAreaInsets
,因为这可能会导致您提到的意外行为

这些
safeareainset
是在更高的
UIViewController
级别上生成的,因此应该在那里处理

我建议你做如下事情:

将此代码添加到将保存您的
FullScreenWKWebView
UIViewController

 override func viewWillLayoutSubviews() {
     super.viewWillLayoutSubviews()

     additionalSafeAreaInsets.bottom -= bottomLayoutGuide.length
 }

通过这种方式,您将保留原始
UIViewController
安全区域插图
,只需为原始视图添加所需的修改器。允许在任何阶段进行修改。

因此我发现了这一点,但我错了。结果表明,这不是约束的问题,而是WKWebView如何在安全区域呈现页面的问题。我发现我发现我的WKWebView覆盖了整个屏幕,但没有在主工具栏/凹口下渲染背景。深绿色是用html定义的

我的解决方案是禁用WKWebViews bultin调整

webView.scrollView.contentInsetAdjustmentBehavior = .never
我还为我的WKWebView创建了两个具有不同优先级的顶部约束。一个为safeArea,另一个为superView。然后,当导航栏可见时,我在代码中更改优先级,以便页面不会在导航栏下呈现

结果: 对superView具有约束


通过对安全区域的约束

将WKWebView固定到其superview仍会将我限制在安全区域。设置
top:insets.top
无效。