不将 WKWebView 保持在安全区域内的约束

Posted

技术标签:

【中文标题】不将 WKWebView 保持在安全区域内的约束【英文标题】:Constraints not keeping WKWebView inside Safe Area 【发布时间】:2019-02-09 03:10:44 【问题描述】:

请原谅我的无知。我对 ios 开发和 Xcode 非常陌生。我尝试在此站点上搜索许多页面,但没有找到任何可以直接解决我的问题的页面。您能提供的任何帮助将不胜感激!

我无法让我的 webview (WKWebview) 保持在安全区域边界内(我认为这是描述它的最佳方式)。我在 webview 上设置了自动生成的约束,我可以在 Main.Storyboard 编辑器中看到 webview 在安全区域内。

不幸的是,webview 忽略了这些边界并包含了整个视图,并且我网页上的文本出现在时间、电池和连接图标后面的显示屏顶部。

我做错了什么?

这是我的代码和一些图片:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate 

    @IBOutlet var webView: WKWebView!

    override func loadView() 
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    
    override func viewDidLoad() 
        super.viewDidLoad()

        let url = Bundle.main.url(forResource: "bulk_material_table", withExtension: "html")!
        webView.loadFileURL(url, allowingReadAccessTo: url)
        let request = URLRequest(url: url)
        webView.load(request)

    

【问题讨论】:

【参考方案1】:

你的约束是好的。问题在于您被覆盖的 loadView() 方法。您不需要创建新的WKWebView,因为您正在使用情节提要并且 Interface Builder 正在创建它。去掉这个方法,把uiDelegate移动到viewDidLoad()

import UIKit 
import WebKit

class ViewController: UIViewController, WKUIDelegate 

    @IBOutlet var webView: WKWebView!

    override func viewDidLoad() 
        super.viewDidLoad()

        webView.uiDelegate = self // Move delegate here

        let url = Bundle.main.url(forResource: "bulk_material_table", withExtension: "html")!
        webView.loadFileURL(url, allowingReadAccessTo: url)
        let request = URLRequest(url: url)
        webView.load(request)
         

【讨论】:

就是这样!非常感谢。我正在使用 Apple 文档示例 @developer.apple.com/documentation/webkit/wkwebview 进行构建。也许我从那里遗漏了一些东西,或者它的设计没有考虑到约束?无论哪种方式,再次非常感谢!

以上是关于不将 WKWebView 保持在安全区域内的约束的主要内容,如果未能解决你的问题,请参考以下文章

在Xcode 9上,约束到边距不能正常工作

为啥我的 WKWebView 的故事板表示看起来与在模拟器上运行的不同?

AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)

swift 4:在视图内将按钮约束设置为安全区域

顶部安全区域约束动画

添加约束时缺少自动布局“安全区域”