【问题标题】:Top of WKWebViewcontent is clipped under NSToolbar in Mac CatalystWKWebViewcontent 的顶部在 Mac Catalyst 的 NSToolbar 下被剪辑
【发布时间】:2020-03-17 18:16:52
【问题描述】:

我有一个催化剂应用程序,它在 UINavigationController 中有一个 WKWebView。在 iOS 上,我在 Web 视图上方有一个导航栏,如下所示:

但是,在 macOS 上,我隐藏了导航栏,而是显示了一个 NSToolbar。但是,WebView 的内容被剪裁在 Toolbar 下方:

(注意向下滚动网页视图后,内容不再被剪裁)

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

【问题讨论】:

  • 您是否限制在安全区域内?
  • 没有。我将 View Controller 的视图设置为 Web 视图。

标签: ios swift macos appkit mac-catalyst


【解决方案1】:

在我的 Catalyst 应用程序中使用 AppKit 桥后,我确定了问题的原因:Catalyst 窗口的 styleMask 包含 .fullSizeContentView,用于在 @987654326 中创建视图@ 在标题栏/工具栏下扩展(这是在 Safari 等应用程序中启用半透明工具栏的原因)。无论出于何种原因,WKWebView 没有正确处理它,这就是导致内容被剪辑的原因。

作为一种解决方法,我在 AppKit 包中的一个方法中添加了一个 NSWindow.didBecomeMainNotification 的观察者,该方法在应用程序首次启动时运行(对于我的用例,我只担心主窗口)。因此,当窗口成为应用程序的“主”窗口时,会调用以下方法:

    @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
            }
        }
    }

这将从窗口的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2010-12-06
    • 2021-03-12
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多