我正在尝试使用SwiftUI创建macOS应用。我需要TabView
或类似的东西,但是当我使用TabView
时,分段控件不在macOS工具栏中。 Click here to see an example of what I would like
我当前的代码是:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
Text("1")
.tabItem {
Text("1")
}
}
}
}
The result is here as an image
分段控件需要在工具栏中,而不是在视图中。
谢谢。
这里是实现此目的的可能方法的简化演示。经过测试,可与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)")
}
}