我有一个WKWebView,我想覆盖整个屏幕。在没有物理主页按钮的较新设备上,iOS会在“homebar”下添加一个白色区域。我试图覆盖safeAreaInsets
女巫工作正常使内容在“homebar”下,但id喜欢将top参数保持为其默认值。这是因为我顶部的导航栏可以隐藏或显示。设置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)
}
}
谢谢!
您是否可以使用autolayout解决此问题,方法是将webview固定到superview或安全区域,具体取决于您的需求?
无论如何,你可能会做这样的事情:
override var safeAreaInsets: UIEdgeInsets {
let insets = super.safeAreaInsets
return UIEdgeInsets(top: insets.top, left: 0, bottom: 0, right: 0)
}
我不建议直接覆盖任何safeAreaInsets
的UIView
,因为它可能导致你自己提到的意外行为。
这些
safeAreaInsets
是在更高的UIViewController
水平上生成的,因此应该在那里处理。
我宁愿建议做如下:
将此代码添加到将保存UIViewController
的FullScreenWKWebView
。
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
additionalSafeAreaInsets.bottom -= bottomLayoutGuide.length
}
这样你就可以保留原来的UIViewController
的safeAreaInsets
并简单地为原版加入所需的修饰符。允许在任何阶段进行修改。
所以我想出来了,男孩,我错了。事实证明,这不是约束的问题,而是WKWebView如何在安全区域中呈现页面。我发现我的WKWebView覆盖了整个屏幕,但没有在家庭栏/凹槽下渲染背景。深绿色在html中定义。
我解决这个问题的方法是禁用WKWebViews bultin调整。
webView.scrollView.contentInsetAdjustmentBehavior = .never
我还为我的WKWebView创建了两个具有不同优先级的顶级约束。一个到safeArea,一个到superView。然后,当导航栏可见时,我会更改代码中的优先级,以便页面不会在导航栏下呈现。
qazxsw poi对安全区域的限制