macCatalyst/SwiftUI触摸栏

macCatalyst/SwiftUI触摸栏,swiftui,mac-catalyst,macbookpro-touch-bar,Swiftui,Mac Catalyst,Macbookpro Touch Bar,如何在用SwiftUI编写的Catalyst应用程序中添加触摸栏支持 例如,如果要在视图中显示按钮: import SwiftUI struct ContentView: View { var body: some View { VStack{ #if targetEnvironment(macCatalyst) Text("macOS") .frame(maxWidth: .infinity, maxHe

如何在用SwiftUI编写的Catalyst应用程序中添加触摸栏支持

例如,如果要在视图中显示按钮:

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack{
        #if targetEnvironment(macCatalyst)
            Text("macOS")
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .focusable()
            .touchBar {
                Button(action: {
                    print("tapped")
                }) {
                    Text("TestButton")
                }
            }
        #endif
        Text("iOS")
        }
    }
}
如果我在macOS应用程序中使用它,它可以工作,但如果我在Catalyst中使用它并添加targetEnvironment,则会出现错误:

“focusable(uu3;:onFocusChange:)”在iOS中不可用,“touchBar(内容:)”在iOS中不可用

谢谢你的帮助。

改变

#if targetEnvironment(macCatalyst)


macCatalyst
必须仍在iOS Mac Catalyst应用程序的环境中,因此手动检查操作系统应该是可靠的。

您可以添加自定义视图修改器:

struct TouchBarView: ViewModifier {
    func body(content: Content) -> some View {
        #if os(macOS)
        return content
                .touchBar { ... }
        #else
        return content
        #endif
    }
}
用法:

Text("Text")
    .modifier(TouchBarView())

但是如果我在Catalyst下检查操作系统,它返回的是iOS而不是macOSSo,请使用
#如果targetEnvironment(macCatalyst)
,则错误显示它在iOS下不可用
Text("Text")
    .modifier(TouchBarView())