macOS SwiftUI Tampilan Tab Aplikasi dengan Kontrol Tersegmentasi di Bilah Alat

9

Saya mencoba membuat aplikasi macOS dengan SwiftUI. Saya membutuhkan TabViewatau yang serupa, tetapi ketika saya menggunakan TabViewkontrol tersegmentasi tidak di macOS Toolbar. Klik di sini untuk melihat contoh apa yang saya inginkan

Kode saya saat ini adalah:

import SwiftUI

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

Hasilnya di sini sebagai gambar

Kontrol tersegmentasi harus di bilah alat dan bukan tampilan.

Terima kasih.

NG235
sumber

Jawaban:

1

Berikut ini adalah demo sederhana dari pendekatan yang memungkinkan untuk mencapai hal ini. Diuji & berfungsi dengan Xcode 11.2.

demo

1) Siapkan jendela yang membutuhkan gaya dan latar belakang 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) Mempersiapkan tampilan konten jendela untuk memiliki perilaku yang diperlukan

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
sumber
Terima kasih atas jawaban Anda. Saya benar-benar mencari sesuatu yang mirip dengan aplikasi Apple, meskipun di AppKit. Respons Anda sangat kami hargai. Terima kasih
NG235
Saya percaya bahwa Apple menunjukkan aplikasi SwiftUI Mac di WWDC 2019 dengan kontrol tersegmentasi di bilah alat.
NG235