Problemi di clic in SwiftUI Catalyst con Big Sur

Nov 13 2020

Ho appena aggiornato a Big Sur e ora sto riscontrando seri problemi nella mia app Catalyst. Ho creato un nuovo progetto con un codice simile per testarlo. Il comportamento è leggermente diverso, ma in entrambi i casi c'è un punto in cui il clic smette di funzionare o almeno non è più affidabile.

Prendi questo codice di esempio:

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

Se inizi a fare clic sulla barra delle schede in basso, funziona. Se continui a fare clic sulle schede in alto, funziona anche tu. Ma dopo aver fatto clic sulle schede false in alto, non puoi più fare clic sulla TabBar in basso.

Qualcun altro ha riscontrato questo problema? È un bug di Big Sur?

MODIFICARE

Funziona perfettamente nel simulatore su iPadOS.

Risposte

3 user11114569 Nov 17 2020 at 23:07

Sto affrontando problemi abbastanza simili. Ho anche un HStack come vista principale. In ogni riga ci sono pulsanti e campi di testo. Quando si aggiungono / rimuovono colonne, i pulsanti smettono di funzionare e i campi di testo focalizzati non possono più essere modificati con i clic (i clic con il tasto destro funzionano ancora). Ho anche osservato pulsanti non funzionanti in ZStacks. Sto ancora cercando di capire lo scenario problematico per riprodurlo in modo affidabile. Potrebbe essere qualcosa con HStack, dato che li usiamo entrambi.

3 Bret Nov 27 2020 at 01:13

Questo è sicuramente un grosso problema. Riportato anche quihttps://developer.apple.com/forums/thread/667004

Vorrei che Apple lo riconoscesse.