Я пытаюсь добавить панель инструментов внутри строки заголовка в приложение MacOS, используя SwiftUI, что-то похожее на то, что показано ниже.
Я не могу найти способ добиться этого с помощью SwiftUI. В настоящее время у меня есть панель инструментов (в которой только текстовое поле), но я хочу переместить ее в строку заголовка.
Мой текущий код:
struct TestView: View {
var body: some View {
VStack {
TextField("Placeholder", text: .constant("")).padding()
Spacer()
}
}
}
Итак, в моем случае мне нужно иметь текстовое поле внутри панели инструментов.
macos
swiftui
macos-catalina
Биджой Тангарадж
источник
источник
Ответы:
Подход 1:
Это делается путем добавления титульного аксессуара. Я смог сделать это, изменив файл AppDelegate.swift. Мне пришлось применить некоторые странные отступы, чтобы все выглядело правильно.
AppDelegate.swift
TitlebarAccessory.swift
Результат:
Подход 2 (Альтернативный метод):
Идея состоит в том, чтобы сделать часть панели инструментов, используя раскадровку, а остальную часть приложения - SwiftUI. Это делается путем создания нового приложения с раскадровкой в качестве пользовательского интерфейса. Затем перейдите к раскадровке, удалите контроллер представления по умолчанию и добавьте новый
NSHostingController
. Подключите недавно добавленный хостинг-контроллер к главному окну, установив его взаимосвязь. Добавьте вашу панель инструментов в окно, используя конструктор интерфейса.Присоедините пользовательский класс к вашему
NSHostingController
и загрузите в него представление SwiftUI.Пример кода ниже:
Использование этого подхода также дает вам возможность настроить панель инструментов.
источник