我有一个催化剂应用,它在UINavigationController里有一个WKWebView。在iOS上,我在WebView上方有一个导航栏,像这样。
但在macOS上,我隐藏了导航条,而是显示一个NSToolbar。然而,WebView的内容却被剪在了工具栏的下方。
(请注意,在向下滚动Web View后,内容不再被剪掉)
如何设置WKWebView,使内容不被剪切到工具栏下方?
在我的Catalyst应用中玩了AppKit桥接器后,我确定了问题的原因:在我的Catalyst应用中,我的导航栏被隐藏了。styleMask
Catalyst窗口包含 .fullSizeContentView
视图,它用于在一个新的视图中实现 NSWindow
延伸到titlebartoolbar下面(这就是在Safari等应用程序中启用半透明工具栏的原因)。不管什么原因。WKWebView
并没有正确处理它,这就是导致内容被剪切的原因。
作为一个变通方法,我为以下内容添加了一个观察者 NSWindow.didBecomeMainNotification
在AppKit bundle中的一个方法中,该方法在应用程序首次启动时运行(对于我的用例,我只担心主窗口)。因此,当一个窗口成为应用程序的 "主 "窗口时,以下方法会被调用。
@objc func setWindow(_ sender: Notification) {
if let w = sender.object as? NSWindow {
if w.styleMask.contains(.fullSizeContentView){
var sm = w.styleMask
sm.remove(.fullSizeContentView)
w.styleMask = sm
}
}
}
这将移除 .fullSizeContentView
从窗口 styleMask
因此, WKWebView
的内容在第一次出现时不再被剪切。
我应该注意的是,这个变通方法并不完美--你不会再拥有工具栏下的半透明效果。
如果你想在Catalyst应用中添加AppKit Bundle,以下资源应该会有所帮助。
https:/crunchybagel.comdisabling-the-mac-zoom-maximise-button-in-catalyst。 https:/www.highcaffeinecontent.comblog20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit
如果你还是一头雾水,我建议你玩玩我找到的下面的演示项目。https:/github.comnoahsark769CatalystPlayground。