使用 Big Sur 在 SwiftUI Catalyst 中单击问题

Lup*_*rus 9 swiftui mac-catalyst

我刚刚更新到 Big Sur,现在我的 Catalyst 应用程序出现严重问题。我用类似的代码创建了一个新项目来测试它。行为有点不同,但在这两种情况下都有一点,点击停止工作或至少不再可靠。

以这个示例代码为例:

struct ContentView: View {
        
    private var tabs = ["tab1", "tab2", "tab3"]
    @State private var selectedTab = 0
    
    var body: some View {
        VStack {
            
            self.fakeTabs()
            
            self.tabView()
            
        }
    }
    
    private func fakeTabs() -> some View {
        HStack(spacing: 0) {
            
            // ========================================================
            // Tabs
            // ========================================================
            ForEach(self.tabs, id: \.self) { tab in
                ZStack {
                    // background
                    Rectangle()
                        .fill(self.isSelected(tab: tab) ? Color.blue : Color.green)
                        .border(Color.black, width: 1)
                        .contentShape(Rectangle())
                    // icon
                    HStack(spacing: 15.0) {
                        Image(systemName: "folder")
                            .foregroundColor(.white)
                            .frame(width: 20, height: 20)
                        Text(tab)
                            .font(.caption)
                    }
                }
                .onTapGesture {
                    self.selectedTab = self.tabs.firstIndex(where: { $0 == tab }) ?? 0
                }
            }
        }
        .frame(height: 30)
    }
    
    private func tabView() -> some View {
        TabView(selection: self.$selectedTab) {
            
            ForEach(self.tabs.indices) { index in
                
                let tab = self.tabs[index]
                
                Text("Tab selected: \(tab)")
                    .tabItem { Text(tab) }
                    .tag(index)
                
            }
        }
    }
    
    private func isSelected(tab: String) -> Bool {
        if let index = self.tabs.firstIndex(where: { $0 == tab }) {
            if index == self.selectedTab {
                return true
            }
        }
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您开始单击底部的选项卡栏,它会起作用。如果您然后继续单击顶部的选项卡,它也可以工作。但是点击顶部的假标签后,你就不能再点击底部的 TabBar 了。

其他人是否遇到过这个问题?这是一个大苏尔错误吗?

编辑

它在 iPadOS 上的模拟器中完美运行。

小智 3

我面临着非常相似的问题。我还有一个 HStack 作为主视图。每行都有按钮和文本字段。添加/删除列时,按钮停止工作,并且无法再通过单击更改焦点文本字段(右键单击仍然有效)。还观察到 ZStack 中的非工作按钮。仍在找出问题场景以可靠地重现它。可能是 HStack 的一些东西,因为我们都使用它们。