让WKWebView覆盖整个屏幕

问题描述 投票:0回答:3

我有一个WKWebView,我想覆盖整个屏幕。在没有物理主页按钮的较新设备上,iOS会在“homebar”下添加一个白色区域。我试图覆盖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)
    }
}

谢谢!

ios swift constraints wkwebview safearealayoutguide
3个回答
2
投票

您是否可以使用autolayout解决此问题,方法是将webview固定到superview或安全区域,具体取决于您的需求?

无论如何,你可能会做这样的事情:

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

0
投票

我不建议直接覆盖任何safeAreaInsetsUIView,因为它可能导致你自己提到的意外行为。

这些safeAreaInsets是在更高的UIViewController水平上生成的,因此应该在那里处理。

我宁愿建议做如下:

将此代码添加到将保存UIViewControllerFullScreenWKWebView

 override func viewWillLayoutSubviews() {
     super.viewWillLayoutSubviews()

     additionalSafeAreaInsets.bottom -= bottomLayoutGuide.length
 }

这样你就可以保留原来的UIViewControllersafeAreaInsets并简单地为原版加入所需的修饰符。允许在任何阶段进行修改。


0
投票

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

iPad with wkwebview that didn't cover the whole screen

我解决这个问题的方法是禁用WKWebViews bultin调整。

webView.scrollView.contentInsetAdjustmentBehavior = .never

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

结果:Result with no bar对superView有约束

qazxsw poi对安全区域的限制

© www.soinside.com 2019 - 2024. All rights reserved.