在Mac Catalyst中,WKWebViewcontent的顶部被剪切在NSToolbar下。

问题描述 投票:0回答:1

我有一个催化剂应用,它在UINavigationController里有一个WKWebView。在iOS上,我在WebView上方有一个导航栏,像这样。[Image]

但在macOS上,我隐藏了导航条,而是显示一个NSToolbar。然而,WebView的内容却被剪在了工具栏的下方。[Image]

(请注意,在向下滚动Web View后,内容不再被剪掉)

如何设置WKWebView,使内容不被剪切到工具栏下方?

ios swift macos appkit maccatalyst
1个回答
0
投票

在我的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。

© www.soinside.com 2019 - 2024. All rights reserved.