J'essaie de créer une application macOS avec SwiftUI. J'ai besoin d'un TabView
ou quelque chose de similaire, mais lorsque j'utilise TabView
le contrôle segmenté n'est pas dans la barre d'outils macOS. Cliquez ici pour voir un exemple de ce que je voudrais
Mon code actuel est:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
Text("1")
.tabItem {
Text("1")
}
}
}
}
Le résultat est ici sous forme d'image
Le contrôle segmenté doit être dans la barre d'outils et non dans la vue.
Je vous remercie.
Voici une démonstration simplifiée de l'approche possible pour y parvenir. Testé et fonctionne avec Xcode 11.2.
1) Préparez la fenêtre pour avoir le style et l'arrière-plan nécessaires dans AppDelegate
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
.edgesIgnoringSafeArea(.top)
.frame(minWidth: 480, maxWidth: .infinity, minHeight: 300, maxHeight: .infinity)
// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.center()
window.titlebarAppearsTransparent = true
window.titleVisibility = .hidden
window.setFrameAutosaveName("Main Window")
window.contentView = NSHostingView(rootView: contentView)
window.makeKeyAndOrderFront(nil)
}
2) Préparez la vue du contenu de la fenêtre pour avoir le comportement nécessaire
struct ContentView: View {
private let tabs = ["Watch Now", "Movies", "TV Shows", "Kids", "Library"]
@State private var selectedTab = 0
var body: some View {
VStack {
HStack {
Spacer()
Picker("", selection: $selectedTab) {
ForEach(tabs.indices) { i in
Text(self.tabs[i]).tag(i)
}
}
.pickerStyle(SegmentedPickerStyle())
.padding(.top, 8)
Spacer()
}
.padding(.horizontal, 100)
Divider()
GeometryReader { gp in
VStack {
ChildTabView(title: self.tabs[self.selectedTab], index: self.selectedTab)
}
}
}
}
}
struct ChildTabView: View {
var title: String
var index: Int
var body: some View {
Text("\(title)")
}
}