Верх WKWebViewcontent обрезается под NSToolbar в Ma c Catalyst - PullRequest
0 голосов
/ 17 марта 2020

У меня есть приложение катализатора, которое имеет WKWebView в UINavigationController. На iOS у меня есть панель навигации над веб-представлением, например: [Image]

Однако в macOS я скрыл панель навигации и вместо этого отображаю панель NSToolbar. Однако содержимое веб-представления обрезается под панелью инструментов: [Image]

(обратите внимание, что после прокрутки веб-просмотра содержимое больше не обрезается)

Как настроить WKWebView так что содержимое не обрезается под панелью инструментов?

1 Ответ

0 голосов
/ 24 апреля 2020

Проработав мост AppKit в моем приложении Catalyst, я определил, что является причиной проблемы: styleMask для Catalyst windows содержит .fullSizeContentView, который используется для создания представления внутри NSWindow расширяется под заголовком / панелью инструментов (это то, что включает полупрозрачную панель инструментов в приложениях, таких как Safari). По какой-то причине WKWebView не справляется с этим должным образом, и именно поэтому содержимое обрезается.

В качестве обходного пути я добавляю наблюдателя для NSWindow.didBecomeMainNotification в метод в комплекте AppKit который запускается при первом запуске приложения (в моем случае я беспокоюсь только о главном окне). В результате следующий метод вызывается, когда окно становится «главным» окном приложения:

    @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 При первом появлении контент больше не обрезается.

Я должен отметить, что обходной путь не идеален - у вас больше не будет эффекта полупрозрачности под панелью инструментов.

Если вы хотите добавить пакет AppKit в приложение 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

...