Поврежденные просмотры навигации - PullRequest
0 голосов
/ 19 июня 2020

Я почти уверен, что это ошибка SwiftUI, но мне было интересно, сталкивался ли кто-нибудь с ней и нашел обходной путь. Обычно я использую поле поиска, но я упростил его до такой степени, что ошибка обнаруживается в простой текстовой строке.

Создайте приложение с одним представлением, скопируйте его в ContentView и запустите Это. Дважды коснитесь значка поиска, затем прокрутите представление; вы увидите текст, который прокручивается ПОД заголовком.

import SwiftUI

struct ContentView: View {
  private var items = (0 ... 50).map {String($0)}
  @State private var condition = false

  var searchButton: some View {
    Button(action: {self.condition.toggle()}) {
      Image(systemName: "magnifyingglass").imageScale(.large)
    }
  }

  var body: some View {
    NavigationView {
      VStack {
        if condition {
          Text("Peekaboo")
        }

        List {
          ForEach(items, id: \.self) {item in
            HStack {
              Text(item)
            }
          }
        }
      }
      .navigationBarTitle("List of Items")
      .navigationBarItems(leading: searchButton)
    }
  }
}

Title overlaps list items This is what the suggested solution looks like. Пустое текстовое представление в предложении else

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Кажется, что View не может справиться с переменным количеством просмотров. Обход этого странного поведения заключается в следующем:

import SwiftUI

struct ContentView: View {
private var items = (0 ... 50).map {String($0)}
@State private var condition = false

var searchButton: some View {
Button(action: {self.condition.toggle()}) {
  Image(systemName: "magnifyingglass").imageScale(.large)
}
}

var body: some View {
    NavigationView {
        VStack {
            if condition {
                Text("Peekaboo")
            } else {
                Text("")
            }
           // or use this  Text(condition ? "Peekaboo" : "")
            List {
                ForEach(items, id: \.self) {item in
                    HStack {
                        Text(item)
                    }
                }
            }
        }
        .navigationBarTitle("List of Items")
        .navigationBarItems(leading: searchButton)
    }
}
}

Сообщите мне, работает ли оно, а если нет, сообщите нам, какое устройство / систему вы используете. Протестировано с Xcode 11.6 beta, Ma c 10.15.5, target ios 13,5 и ma c катализатором.

0 голосов
/ 19 июня 2020

Может быть, это ошибка, отправьте отзыв в Apple, но в настоящее время NavigationView ведет себя так - он сворачивает панель навигации только , если его верхнее содержимое - List/ScrollView/Form. Итак, чтобы решить проблему, переместите свой VStack либо в List, либо из NavigationView

1)

  var body: some View {
    NavigationView {
        List {
          if condition {
             Text("Peekaboo")
          }
          ForEach(items, id: \.self) {item in

2)

    var body: some View {
        VStack {
         if condition {
            Text("Peekaboo")
         }
         NavigationView {
           List {
...