macOS SwiftUI มุมมองแท็บแอปพร้อมการควบคุมแบ่งกลุ่มใน Toolbar


9

ฉันกำลังพยายามสร้างแอป macOS ด้วย SwiftUI ฉันต้องการTabViewหรือสิ่งที่คล้ายกัน แต่เมื่อฉันใช้TabViewการควบคุมแบ่งส่วนไม่ได้อยู่ในแถบเครื่องมือ macOS คลิกที่นี่เพื่อดูตัวอย่างสิ่งที่ฉันต้องการ

รหัสปัจจุบันของฉันคือ:

import SwiftUI

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

ผลลัพธ์อยู่ที่นี่เป็นรูปภาพ

การควบคุมแบ่งส่วนจะต้องอยู่ในแถบเครื่องมือไม่ใช่มุมมอง

ขอบคุณ.

คำตอบ:


1

นี่คือตัวอย่างที่ง่ายของวิธีที่เป็นไปได้เพื่อให้บรรลุเป้าหมาย ผ่านการทดสอบและทำงานร่วมกับ Xcode 11.2

การสาธิต

1) เตรียมหน้าต่างเพื่อให้มีสไตล์และพื้นหลังที่ต้องการ 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) เตรียมมุมมองเนื้อหาหน้าต่างเพื่อให้มีพฤติกรรมที่จำเป็น

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

ขอบคุณสำหรับคำตอบ. ฉันกำลังมองหาบางสิ่งที่เป็นเหมือนแอพของ Apple แม้ว่าใน AppKit คำตอบของคุณจะได้รับการชื่นชม ขอบคุณ
NG235

ฉันเชื่อว่า Apple แสดงแอป SwiftUI Mac ที่ WWDC 2019 พร้อมการควบคุมแบบแบ่งกลุ่มในแถบเครื่องมือ
NG235
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.