WKWebView 中的奇怪边距

Posted

技术标签:

【中文标题】WKWebView 中的奇怪边距【英文标题】:Strange Margin in WKWebView 【发布时间】:2016-01-25 00:01:34 【问题描述】:

我有一个带有几个 UIView(使用 Interface Builder 构建)的 UIViewController,其中包括我想用作 WKWebView 的一个。我已经能够创建 WKWebView 并将其作为子视图加载到这些 UIView 之一——但是当我加载 URL 时,我在顶部和左侧得到了这个奇怪的填充。我在使用 UIWebView 时遇到了同样的问题,但能够使用

解决它
self.automaticallyAdjustsScrollViewInsets = false;

但是,这似乎对动态加载的 WKWebView 没有任何帮助。

从网络加载页面时,我也得到相同的填充,所以我知道它不在我的本地 html 中。

编辑:我开始怀疑容器 UIView 中的自动布局是否会导致这种情况......

以下是相关代码:

    var webView:WKWebView!
@IBOutlet var containerView : UIView?
@IBOutlet weak var webContainer: UIView!

override func loadView() 
    super.loadView()
    self.webView = WKWebView()
    if(self.webView != nil)
        self.containerView = self.webView!
        self.containerView!.frame = self.webContainer.frame
        self.webContainer.addSubview(self.containerView!)
    


override func viewDidLoad() 
    super.viewDidLoad()
    let bundle = NSBundle.mainBundle()
    let url = bundle.URLForResource("index", withExtension: "html")
    let request = NSURLRequest(URL: url!)
    webView.loadRequest(request)

这就是它的样子。 UIView 容器的 BG 颜色是深灰色——您还会注意到,即使我将 WebView 的框架设置为与 UIView 容器相同,html 似乎也超出了 UIView:

【问题讨论】:

我自己在 webview 中加载了 html 源代码。添加样式标签并将边距设置为零对我有用。 【参考方案1】:

这是因为WKWebView 使用适当的contentInset 为导航栏保留了空间。但是,由于您的 WKWebView 是子视图,因此不再需要进行此调整。

self.webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

viewDidLoad 方法之后执行此操作很重要。例如在didFinishedNavigation 中的WKNavigationDelegate

【讨论】:

有趣的是,在 Swift 中这写起来更可爱:webView.scrollView.contentInset = .zero Objective-C 等价物是:webView.scrollView.contentInset = UIEdgeInsetsZero【参考方案2】:
self.automaticallyAdjustsScrollViewInsets = NO;
  if (@available(ios 11.0, *)) 
    self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
  

【讨论】:

您好,您的回答可能是正确的,但请尝试在您的代码中添加一些解释:) 语言错误。 在 Swift 5 中,以下内容就足够了:webView.scrollView.contentInsetAdjustmentBehavior = .never 这个答案是正确的!

以上是关于WKWebView 中的奇怪边距的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView - 放大后内容不合适

在 WKWebView 上禁用双击滚动

如果之前已加载某些网页,WKWebView 不会加载 .archive 文件

滚动视图中的 WKWebView

当 WKWebView 嵌入到 UITableViewCell 中时,WebView 的后半部分不会显示

wkwebview ios 10在重新创建webview后停止使用localfileurl加载文件