Mac Catalyst 中 WKWebViewcontent 的顶部被剪切在 NSToolbar 下
Top of WKWebViewcontent is clipped under NSToolbar in Mac Catalyst
我有一个催化剂应用程序,它在 UINavigationController 中有一个 WKWebView。在 iOS,我在 Web 视图上方有一个导航栏,如下所示:
但是,在 macOS 上,我隐藏了导航栏,而是显示了 NSToolbar。但是,WebView 的内容被剪切在工具栏下方:
(注意向下滚动网页视图后,内容不再被裁剪)
如何设置 WKWebView 以使内容不会被剪切到工具栏下方?
在我的 Catalyst 应用程序中使用 AppKit 桥接后,我确定了问题的原因:Catalyst windows 的 styleMask
包含 .fullSizeContentView
,这用于使 NSWindow
中的视图在 titlebar/toolbar 下扩展(这就是在 Safari 等应用程序中启用半透明工具栏的原因)。无论出于何种原因,WKWebView
没有正确处理它,这就是导致内容被剪裁的原因。
作为一种变通方法,我在应用程序首次启动时运行的 AppKit 包中的一个方法中为 NSWindow.didBecomeMainNotification
添加了一个观察者(对于我的用例,我只担心主要的 window).因此,当 window 成为应用程序的 "main" window 时,将调用以下方法:
@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
}
}
}
这会从 window 的 styleMask
中删除 .fullSizeContentView
,因此 WKWebView
的内容在首次出现时不再被剪裁。
我应该注意到解决方法并不完美 - 工具栏下将不再有半透明效果。
如果您想将 AppKit Bundle 添加到 Catalyst 应用程序,以下资源应该会有所帮助
https://crunchybagel.com/disabling-the-mac-zoom-maximise-button-in-catalyst/
https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit
如果您仍然感到困惑,我建议您玩一下我找到的下面的演示项目:
https://github.com/noahsark769/CatalystPlayground
我有一个催化剂应用程序,它在 UINavigationController 中有一个 WKWebView。在 iOS,我在 Web 视图上方有一个导航栏,如下所示:
但是,在 macOS 上,我隐藏了导航栏,而是显示了 NSToolbar。但是,WebView 的内容被剪切在工具栏下方:
(注意向下滚动网页视图后,内容不再被裁剪)
如何设置 WKWebView 以使内容不会被剪切到工具栏下方?
在我的 Catalyst 应用程序中使用 AppKit 桥接后,我确定了问题的原因:Catalyst windows 的 styleMask
包含 .fullSizeContentView
,这用于使 NSWindow
中的视图在 titlebar/toolbar 下扩展(这就是在 Safari 等应用程序中启用半透明工具栏的原因)。无论出于何种原因,WKWebView
没有正确处理它,这就是导致内容被剪裁的原因。
作为一种变通方法,我在应用程序首次启动时运行的 AppKit 包中的一个方法中为 NSWindow.didBecomeMainNotification
添加了一个观察者(对于我的用例,我只担心主要的 window).因此,当 window 成为应用程序的 "main" window 时,将调用以下方法:
@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
}
}
}
这会从 window 的 styleMask
中删除 .fullSizeContentView
,因此 WKWebView
的内容在首次出现时不再被剪裁。
我应该注意到解决方法并不完美 - 工具栏下将不再有半透明效果。
如果您想将 AppKit Bundle 添加到 Catalyst 应用程序,以下资源应该会有所帮助
https://crunchybagel.com/disabling-the-mac-zoom-maximise-button-in-catalyst/ https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit
如果您仍然感到困惑,我建议您玩一下我找到的下面的演示项目: https://github.com/noahsark769/CatalystPlayground