Chế độ xem tab ứng dụng macOS SwiftUI với Điều khiển phân đoạn trong Thanh công cụ


9

Tôi đang cố gắng tạo một ứng dụng macOS với SwiftUI. Tôi cần một TabViewhoặc một cái gì đó tương tự, nhưng khi tôi sử dụng TabViewđiều khiển được phân đoạn không có trong Thanh công cụ macOS. Nhấn vào đây để xem một ví dụ về những gì tôi muốn

Mã hiện tại của tôi là:

import SwiftUI

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

Kết quả là ở đây như một hình ảnh

Điều khiển được phân đoạn cần phải nằm trong thanh công cụ chứ không phải dạng xem.

Cảm ơn bạn.

Câu trả lời:


1

Dưới đây là một bản demo đơn giản hóa của phương pháp có thể để đạt được điều này. Đã thử nghiệm & hoạt động với Xcode 11.2.

bản giới thiệu

1) Chuẩn bị cửa sổ để có phong cách và nền tảng cần thiết trong 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) Chuẩn bị xem nội dung cửa sổ để có hành vi cần thiết

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

Cảm ơn bạn vì câu trả lời. Tôi thực sự đang tìm kiếm thứ gì đó giống như các ứng dụng của Apple, ngay cả khi trong AppKit. Phản ứng của bạn được đánh giá cao mặc dù. Cảm ơn
NG235

Tôi tin rằng Apple đã hiển thị ứng dụng SwiftUI Mac tại WWDC 2019 với điều khiển được phân đoạn trên thanh công cụ.
NG235
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.