如何配置WKWebView来填充NSWindow?

Rob*_*ire 13 macos cocoa nsviewcontroller swift wkwebview

我有一个使用XCode 7.2在Swift中开发的小型原型应用程序.该应用程序是作为带有故事板的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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我已覆盖loadView()直接创建a WKWebView并将其作为根视图分配给view属性ViewController,而不是加载故事板中定义的视图.

请注意,可以对该frame参数WKWebView进行评论,以证明该问题根源的不同行为.

期望的行为

WKWebView实例应该填充对应于每个文档的窗口中,和初始大小和新的文档窗口位置应当与用于定义NSWindow(在(196,240)小480x270)在故事板中.本WKWebView应与封闭窗口大小调整.

观察到的行为

没有frame争论

如果没有frame参数,运行应用程序时,即使窗口菜单显示的"无题"的文件已创建不显示文档窗口.使用" 文件">"新建"创建更多文档(无标题2等)时,也不会显示文档窗口.

但是,如果文档是使用显示全屏查看>进入全屏模式时,WKWebView预期和问候显示.

随着frame论点

frame参数,记录含有所述窗户WKWebView及其问候以在给定的尺寸和位置显示CGRect.

我不明白为什么,当WKWebView没有指定框架时,视图被强制为全屏模式下容器(屏幕)的大小,但是在窗口模式下,相反的看似发生:窗口被强制视图的(简并?)大小,因此变得不可见.我期待新视图采用故事板中定义的窗口大小.

在我ViewController,我如何配置我的WKWebView实例填充NSWindow文档框架产生相应的每个NSDocument?或者,也许我的方法是错误的,我应该通过视图大小来配置初始窗口大小ViewController.loadView()

Pra*_*p K 3

试试这个方法。您应该首先调用 super.loadView() 。这将为您提供从故事板加载的视图的初始大小。然后,您可以使用原始视图的框架将视图本身更改为 Web 视图。希望这能解决您的问题。

override func loadView() {
    super.loadView()
    view = WKWebView(frame:self.view.frame)
}
Run Code Online (Sandbox Code Playgroud)

您还可以尝试设置 Web 视图的背景颜色以查看其工作情况。

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