Навигационная ссылка ScrollView все еще активна в VStack и GeometryReader, XCode12, beta 4 - PullRequest
1 голос
/ 05 августа 2020

Используя XCode12, beta 4, я пытаюсь разделить область заголовка и ScrollView. Я пробовал VStack и GeometryReader; однако, когда я щелкаю в области заголовка, срабатывает ссылка навигации в элементе ScrollView под ним.

Если я использую список, это нежелательное поведение не наблюдается. Если я использую ScrollView в XCode 11.6 и строю для iOS13, это нежелательное поведение также не наблюдается.

Что-то изменилось с ScrollViews в VStacks или GeometryReaders в iOS14? Почему прокрутка "скользит" под объектом в VStack или GeometryReader?

struct ContentView: View {
  var body: some View {
   NavigationView{
    //GeometryReader { geo in
     VStack{
      VStack{
       Text("Blah")
      }//.frame(height: geo.size.height*0.20)
      
      VStack {
       ScrollView {
        ForEach(0..<10) { i in
         NavigationLink(destination: Text("\(i)")) {
          cardRow(i: i)
           .frame(maxWidth: .infinity)
           .foregroundColor(Color(UIColor.label))
           .padding()
           .background(RoundedRectangle(cornerRadius: 12))
           .foregroundColor(Color(UIColor.secondarySystemFill))
           .padding()
         }
        }
       }
      }//.frame(height: geo.size.height*0.90)
      
    }
   }.navigationViewStyle(StackNavigationViewStyle())
  }
    
  struct cardRow: View {
   var i: Int
    
   var body: some View {
    HStack {
     VStack {
      Text("88")
     }.hidden()
     .overlay(
      VStack{
       Text("\(i)")
      }
     )
     Divider()
      .background(Color(UIColor.label))
     Spacer()
    }
   }
  }
}

1 Ответ

1 голос
/ 05 августа 2020

Вот рабочее решение (проверено с Xcode 12 / iOS 14)

  VStack {
   ScrollView {
    ForEach(0..<10) { i in
     NavigationLink(destination: Text("\(i)")) {
      cardRow(i: i)
       .frame(maxWidth: .infinity)
       .foregroundColor(Color(UIColor.label))
       .padding()
       .background(RoundedRectangle(cornerRadius: 12))
       .foregroundColor(Color(UIColor.secondarySystemFill))
       .padding()
     }
    }
   }.clipped().contentShape(Rectangle())    // << here !!
  }
...