macOS: NSToolbar с эффектом полупрозрачности в Big Sur

Я работаю с новым проектом Xcode для Big Sur, со сценой Split View с боковой панелью в основной раскадровке. Я хочу, чтобы заголовок окна и панель инструментов имели эффект полупрозрачности, который вы видите на панелях инструментов в Safari или Finder. В моей раскадровке я указываю полноразмерный просмотр содержимого и скрытый текст заголовка, а в раскадровке это выглядит так, как я хочу:

введите описание изображения здесь

Но когда я его создаю и запускаю, панель инструментов окна становится просто белой:

введите описание изображения здесь

Теперь, если я отключу флажок Скрыть строку заголовка, он будет отлично смотреться в раскадровке с заголовком и элементами панели инструментов в одной строке:

введите описание изображения здесь

Теперь, когда я создаю и запускаю его, панель инструментов имеет желаемый эффект прозрачности, но заголовок находится на 2-м уровне над элементами панели инструментов:

введите описание изображения здесь

Я не уверен, что еще я могу сделать, чтобы это контролировать. В идеале я бы скрыл строку заголовка и сохранил полупрозрачность, но, похоже, это не работает. Есть ли что-нибудь еще, что я могу попытаться контролировать?

В противном случае я бы предпочел, чтобы заголовок находился на том же уровне, что и элементы панели инструментов, как в раскадровке. Но даже это не работает так, как хотелось бы.

Есть идеи, что я могу попробовать? Я пробовал изменить стили панели инструментов, но все они дали одинаковые результаты.

РЕДАКТИРОВАТЬ: я пробовал использовать собственный код Apple для навигации по иерархическим представлениям с использованием , и после настройки раскадровки с включением флажков «Полноразмерный просмотр содержимого» и «Скрыть строку заголовка» я вижу ту же проблему: т. е. панель инструментов становится белой. Так что, скорее всего, это ошибка фреймворка Apple? Я не уверен, поэтому я отправил сообщение об ошибке, чтобы выяснить это.


person Z S    schedule 14.12.2020    source источник


Ответы (1)


Я создал приложение, которое отлично работает на High Sierra и Catalina, оно может основываться на OX11. Он удаляет заголовок, но я не использую панель инструментов. Попробуйте, это может быть похоже на то, что вы хотите - возможно, вам придется закомментировать некоторые настройки и т. Д.

Создайте файл MainWindow, который является подклассом NSWindowController. Заполните файл:

class MainWindow: NSWindowController {

    var controller: ViewController?


    override func windowDidLoad() {
        super.windowDidLoad()

        controller = self.contentViewController as? ViewController
        self.smartWindow()
        self.activateWindowDrag()
    }

}


// you may prefer the below as a separate file
extension NSWindowController {

    func smartWindow() {
        self.window?.styleMask.insert(NSWindow.StyleMask.unifiedTitleAndToolbar)
        self.window?.styleMask.insert(NSWindow.StyleMask.fullSizeContentView)
        self.window?.styleMask.insert(NSWindow.StyleMask.titled)
    
        self.window?.toolbar?.isVisible         = false
        self.window?.titleVisibility            = .hidden
        self.window?.titlebarAppearsTransparent = true
    }

    func activateWindowDrag() {
        self.window?.isMovableByWindowBackground = true
    }

}
person Yuma Technical Inc.    schedule 11.01.2021