SwiftUIでmacOSアプリを作成しようとしています。 TabView
または同様のものが必要ですが、TabView
を使用すると、セグメント化されたコントロールがmacOSツールバーにありません。 ここをクリックして、希望の例をご覧ください
私の現在のコードは:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
Text("1")
.tabItem {
Text("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)")
}
}