Visualização da guia App do macOS SwiftUI com controle segmentado na barra de ferramentas

9

Estou tentando criar um aplicativo macOS com o SwiftUI. Preciso de TabViewalgo parecido, mas quando uso TabViewo controle segmentado não está na barra de ferramentas do macOS. Clique aqui para ver um exemplo do que eu gostaria

Meu código atual é:

import SwiftUI

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

O resultado está aqui como uma imagem

O controle segmentado precisa estar na barra de ferramentas e não na exibição.

Obrigado.

NG235
fonte

Respostas:

1

Aqui está uma demonstração simplificada da abordagem possível para conseguir isso. Testado e funciona com o Xcode 11.2.

demonstração

1) Prepare a janela para ter estilo e plano de fundo necessários 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) Prepare a exibição do conteúdo da janela para ter o comportamento necessário

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)")
    }
}
Asperi
fonte
Obrigado pela sua resposta. Estou realmente procurando algo parecido com os aplicativos da Apple, mesmo que no AppKit. Sua resposta é apreciada embora. Obrigado
NG235 15/03
Acredito que a Apple mostrou um aplicativo SwiftUI Mac na WWDC 2019 com um controle segmentado na barra de ferramentas.
NG235 15/03