Scheda App macOS SwiftUI Visualizza con controllo segmentato nella barra degli strumenti


9

Sto cercando di creare un'app macOS con SwiftUI. Ho bisogno di TabViewqualcosa o qualcosa di simile, ma quando uso TabViewil controllo segmentato non si trova nella barra degli strumenti macOS. Clicca qui per vedere un esempio di ciò che vorrei

Il mio codice attuale è:

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            Text("1")
                .tabItem {
                    Text("1")
            }
        }
    }
}

Il risultato è qui come un'immagine

Il controllo segmentato deve trovarsi nella barra degli strumenti e non nella vista.

Grazie.

Risposte:


1

Ecco una demo semplificata del possibile approccio per raggiungere questo obiettivo. Testato e funziona con Xcode 11.2.

dimostrazione

1) Prepara la finestra per avere lo stile e lo sfondo necessari 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) Preparare la visualizzazione del contenuto della finestra in modo che abbia il comportamento necessario

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)")
    }
}

La ringrazio per la risposta. Sto davvero cercando qualcosa che sia come le app di Apple, anche se in AppKit. La tua risposta è comunque gradita. Grazie
NG235 il

Credo che Apple abbia mostrato un'app SwiftUI per Mac al WWDC 2019 con un controllo segmentato nella barra degli strumenti.
NG235,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.