Araç Çubuğunda Segmentli Kontrole sahip macOS SwiftUI Uygulama Sekmesi Görünümü


9

SwiftUI ile bir macOS uygulaması oluşturmaya çalışıyorum. Bir TabViewya da benzer bir şeye ihtiyacım var , ama TabViewsegmentli kontrolü kullandığımda macOS Araç Çubuğu'nda değil. Ne istediğime bir örnek görmek için buraya tıklayın

Geçerli kodum:

import SwiftUI

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

Sonuç burada bir görüntü olarak

Bölümlenmiş denetimin görünümde değil araç çubuğunda olması gerekir.

Teşekkür ederim.

Yanıtlar:


1

İşte bunu başarmak için olası yaklaşımın basitleştirilmiş bir demosu. Xcode 11.2 ile test edildi ve çalışıyor.

gösteri

1) Gerekli stil ve arka plana sahip olmak için pencereyi hazırlayın 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) Gerekli davranışa sahip olmak için pencere içeriği görünümünü hazırlayın

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

Cevabınız için teşekkür ederim. AppKit'te bile Apple'ın uygulamaları gibi bir şey arıyorum. Yanıtınız takdir ediliyor. Teşekkürler
NG235

Apple'ın WWDC 2019'da araç çubuğunda parçalı bir kontrolle bir SwiftUI Mac uygulaması gösterdiğine inanıyorum.
NG235
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.