J'essaie d'ajouter une barre d'outils à l'intérieur de la barre de titre à une application macOS à l'aide de SwiftUI, quelque chose de similaire à ce qui est illustré ci-dessous.
Je ne suis pas en mesure de trouver un moyen d'y parvenir en utilisant SwiftUI. Actuellement, j'ai ma barre d'outils (qui a juste un champ de texte) dans ma vue, mais je veux la déplacer dans la barre de titre.
Mon code actuel:
struct TestView: View {
var body: some View {
VStack {
TextField("Placeholder", text: .constant("")).padding()
Spacer()
}
}
}
Donc, dans mon cas, j'ai besoin d'avoir le champ de texte à l'intérieur de la barre d'outils.
macos
swiftui
macos-catalina
Bijoy Thangaraj
la source
la source
Réponses:
Approche 1:
Cela se fait en ajoutant un accessoire de barre de titre. J'ai pu faire cela en modifiant le fichier AppDelegate.swift. J'ai dû appliquer un rembourrage bizarre pour que ça paraisse bien.
AppDelegate.swift
TitlebarAccessory.swift
Résultat:
Approche 2 (méthode alternative):
L'idée ici est de faire la partie de la barre d'outils en utilisant le storyboard et le reste de l'application en utilisant SwiftUI. Cela se fait en créant une nouvelle application avec storyboard comme interface utilisateur. Ensuite, allez dans le storyboard et supprimez le contrôleur de vue par défaut et ajoutez-en un nouveau
NSHostingController
. Connectez le contrôleur d'hébergement nouvellement ajouté à la fenêtre principale en définissant sa relation. Ajoutez votre barre d'outils à la fenêtre à l'aide du générateur d'interface.Attachez une classe personnalisée à votre
NSHostingController
et chargez-y votre vue SwiftUI.Exemple de code ci-dessous:
L'utilisation de cette approche vous donne également la possibilité de personnaliser la barre d'outils.
la source