swift – 如何配置WKWebView以填充NSWindow?

我有一个小的原型应用程序开发的 Swift与XCode 7.2.该应用程序是作为基于Cocoa文档的应用程序创建的,具有故事板.因此,该项目包含AppDelegate.swift,Document.swift和Main.storyboard,所有这些都与XCode生成的不同,ViewController.swift包含以下内容
import Cocoa
import WebKit

class ViewController: NSViewController {

    var webView: WKWebView {
        return view as! WKWebView
    }

    override func loadView() {
        view = WKWebView(/*frame: CGRect(x: 0,y: 0,width: 200,height: 200)*/)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        webView.loadHTMLString("<html><body><p>Hello,World!</p></body></html>",baseURL: nil)
    }
}

我重写了loadView()来直接创建一个WKWebView并将其分配给ViewController的view属性作为根视图,而不是加载在故事板中定义的视图.

请注意,WKWebView的框架参数可能被注释出来,以显示这个问题根源的不同行为.

期望的行为

WKWebView实例应该填写对应于每个文档的窗口,新文档窗口的初始大小和位置应该是为故事板中的NSWindow定义的(480×270(196,240)). WKWebView应该使用包围窗口调整大小.

观察行为

没有框架参数

没有框架参数,运行应用程序时不会显示文档窗口,即使Window菜单显示已创建“Untitled”文档.当使用文件>创建更多文档(无标题2等)时,也不会显示文档窗口.新.

但是,如果使用View>全屏显示文档,进入全屏,WKWebView及其问候语将按预期显示.

与框架参数

使用框架参数,包含WKWebView及其问候语的文档窗口将以CGRect中给出的大小和位置显示.

我不明白为什么当WKWebView的框架没有被指定时,这个视图在全屏模式下被强制到容器的大小(屏幕),但是在窗口模式中,相反的情况似乎是这样:窗口被强制到(退化?)大小的视图,因此变得不可见.我期待新的观点采用在故事板中定义的窗口的大小.

在我的ViewController中,如何配置我的WKWebView实例以填充文档框架对应的每个NSDocument的NSWindow?或者,也许我的方法错误的,我应该接受ViewController.loadView()中的视图大小配置初始窗口大小?

尝试这种方法.你应该首先调用super.loadView().这将给你从故事板加载的视图的初始大小.然后使用原始视图的框架将视图本身更改为Web视图.希望这能解决你的问题.
override func loadView() {
    super.loadView()
    view = WKWebView(frame:self.view.frame)
}

您还可以尝试设置网页视图的背景颜色,以查看其工作.

webView.loadHTMLString(“< html>< body bgcolor = red>< p> Hello,World!< / p>< / body>< / html>”,baseURL:nil)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...