İPad'de NavigationLink'in tuhaf davranışı

Sep 08 2020

Uygulamamda, bir NavigationView'da gömülü NavigationLinks içeren bir Kaydırma Görünümü var. İPad'de, Navigasyon Bağlantılarına basmak tuhaf bir şeyin olmasına neden olur. Öğelerden birine ilk kez basıldığında mükemmel bir şekilde çalışır ve ayrıntılı görünümü gösterir. Diğer öğelere sonraki basışlar hiçbir şey yapmaz veya önceden basılmış öğenin ayrıntılı görünümünü gösterir. Bazen arka arkaya birkaç öğe için çalışır, ancak daha sonra tekrar donar.

Gezinme yığınında bir sorun gibi görünüyor?

Bu basitleştirilmiş örnek, iOS 13.7 çalıştıran 11 "iPad pro'daki hatayı gösterir

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                ForEach(0..<20) { index in
                    NavigationLink(destination: Text("\(index)")) {
                        Text("\(index)")
                            .padding()
                            .frame(width: 100, height: 100)
                            .background(Color.green)
                    }
                }
            }
        }
    }
}

Yanıtlar

Asperi Sep 08 2020 at 23:00

Evet, bir böceğe benziyor. Apple'a geri bildirimde bulunabilirsiniz.

Bu arada, burada olası bir çözüm var. Xcode 11.7 / iOS 13.7 ile test edildi

struct ContentView: View {
    @State private var selection = -1
    @State private var isActive = false

    var body: some View {
        NavigationView {
            ScrollView {
                ForEach(0..<20) { index in
                    Button(action: {
                        self.selection = index
                        self.isActive = true
                    } ) {
                        Text("\(index)")
                            .padding()
                            .frame(width: 100, height: 100)
                            .background(Color.green)
                    }
                }
            }
            .background(NavigationLink(destination: Text("\(selection)"),
                isActive: $isActive) { EmptyView() })
        }
    }
}