NavigationLink внутри VStack не работает на iPad - PullRequest
0 голосов
/ 13 февраля 2020

Рассмотрим это очень простое представление: всего несколько ссылок на другие страницы. Если вы запустите это на iPhone, все будет работать как положено. Однако, запустите это на iPad в альбомной ориентации, и вы заметите, что в большинстве случаев ссылки просто не работают. Сломался в симе и реальном устройстве, что удивительно.

Когда вы меняете VStack на List, все работает внезапно.

struct ContentView: View {
  var body: some View {
    NavigationView {
      VStack {
        NavigationLink(destination: Text("Link 1")) {
          Text("Link 1")
            .padding(.vertical)
        }

        NavigationLink(destination: Text("Link 2")) {
          Text("Link 2")
            .padding(.vertical)
        }

        NavigationLink(destination: Text("Link 3")) {
          Text("Link 3")
            .padding(.vertical)
        }

        NavigationLink(destination: Text("Link 4")) {
          Text("Link 4")
            .padding(.vertical)
        }
        NavigationLink(destination: Text("Link 5")) {
          Text("Link 5")
            .padding(.vertical)
        }
      }

      Text("Hello iPad")
    }
  }
}

Есть кто-нибудь еще сталкиваешься с этой проблемой? Почему это происходит, и каков обходной путь? Кроме очевидного «использования списка»: p Я использую сетку VStack s и HStack s, чтобы показать ссылки в нескольких столбцах, настраиваемых для размера устройства. Поэтому изменение на List не будет предпочтительным, если не будет необходимости на 100%.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Я предлагаю вам прочитать документацию , прежде чем пытаться найти какой-то "обходной путь"

 // Creates an instance that presents `destination` when `selection` is set
 // to `tag`.
    public init<V>(destination: Destination, tag: V, selection: Binding<V?>, @ViewBuilder label: () -> Label) where V : Hashable

пример использования

struct ContentView: View {
    @State var selection: Int? = 0
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Link 0"), tag: 0, selection: $selection) {
                    Text("link 0")
                }
                NavigationLink(destination: Text("Link 1"), tag: 1, selection: $selection) {
                    Text("link 1")
                }
                NavigationLink(destination: Text("Link 2"), tag: 2, selection: $selection) {
                    Text("link 2")
                }

            }

            Text("Hello iPad user, swipe from left to continue ...")
        }
    }
}
0 голосов
/ 13 февраля 2020

Найден обходной путь:

struct ContentView: View {
  @State var showLink1 = false
  // .. and the other 4

  var body: some View {
    NavigationView {
      ZStack {
        List {
          NavigationLink(destination: Text("Link 1"), isActive: $showLink1) {
            EmptyView()
          }
          // .. and the other 4
        }
        .opacity(0)

        VStack {
          Button(action: { self.showLink1 = true  }) {
            Text("Link 1")
              .padding(.vertical)
          }
          // .. and the other 4
        }
      }

      Text("Hello iPad")
    }
  }
}

О, SwiftUI ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...