Проработав мост 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