使WKWebView覆盖整个屏幕

时间:2019-02-26 09:49:39

标签: ios swift constraints wkwebview safearealayoutguide

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

无论如何,是否仅覆盖leftbottomright

import Foundation
import WebKit

class FullScreenWKWebView: WKWebView {
    override var safeAreaInsets: UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }
}

谢谢!

3 个答案:

答案 0 :(得分:1)

您能否通过自动布局来解决此问题,具体取决于您想要的是将Web视图固定到超级视图还是安全区域?

无论如何,您可能可以执行以下操作:

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

答案 1 :(得分:0)

我不建议直接覆盖任何safeAreaInsets的{​​{1}},因为它可能导致您所提到的意外行为。

  

这些UIView是在更高的safeAreaInsets级别上生成的,因此应在此处处理。

我建议这样做如下:

将此代码添加到将保存您的UIViewController的{​​{1}}。

UIViewController

这样,您将保留原始FullScreenWKWebView的{​​{1}}并只需为原始文件添加所需的修饰符。允许在任何阶段进行修改。

答案 2 :(得分:0)

所以我弄清楚了,男孩,我错了。事实证明,约束并不是问题,而是WKWebView如何在安全区域中呈现页面。我发现我的WKWebView覆盖了整个屏幕,但没有在主页栏/凹口下渲染背景。深绿色是在html中定义的。

iPad with wkwebview that didn't cover the whole screen

我对该问题的解决方案是禁用WKWebViews公告调整。

webView.scrollView.contentInsetAdjustmentBehavior = .never

我还为WKWebView创建了两个优先级不同的优先级约束。一个到safeArea,一个到superView。然后,当导航栏可见时,我会更改代码的优先级,以使页面不会在导航栏下方呈现。

结果: Result with no bar 受限于superView

Result with bar 限制了safeArea