У меня есть cra sh, который непредсказуемо происходит, когда я представляю лист поверх вида, который уже находится в листе. Я смог постепенно отделить части своего вида и пользовательских типов, пока не получил очень простую и общую структуру вида c ниже, которая все еще демонстрирует cra sh.
cra sh происходит, когда я взаимодействую с TextField, а затем взаимодействую с одной из кнопок, которая показывает вложенный лист. Иногда требуется много нажатий между кнопками и текстовым полем, чтобы вызвать cra sh, а иногда это происходит сразу (как в GIF ниже). Иногда я не могу заставить cra sh произойти вообще, но мои пользователи продолжают сообщать об этом.
В gif ниже cra * sh появляется в момент, когда нажата нижняя кнопка. Вы можете видеть, что кнопка никогда не выходит из своего «нажатого» состояния и лист никогда не появляется.
XCode не дает никакой полезной информации о cra sh (скриншоты включены ниже).
Я получил это только на iPhone XR, работающем 13.4.1 и Xcode 11.4.1. Я пробовал на iPhone 6 и нескольких симуляторах и не могу запустить cra sh, но пользователи сообщили об этом на нескольких устройствах.
struct ContentView: View {
@State var showingSheetOne: Bool = false
var body: some View {
Button(action: { self.showingSheetOne = true }) {
Text("Show")
}
.sheet(isPresented: $showingSheetOne) {
SheetOne(showingSheetOne: self.$showingSheetOne)
}
}
}
struct SheetOne: View {
@Binding var showingSheetOne: Bool
@State var text = ""
var body: some View {
VStack {
SheetTwoButton()
SheetTwoButton()
SheetTwoButton()
TextField("Text", text: self.$text)
}
}
}
struct SheetTwo: View {
@Binding var showing: Bool
var body: some View {
Button(action: {
self.showing = false
}) {
Text("Hide")
.frame(width: 300, height: 100)
.foregroundColor(.white)
.background(Color.blue)
}
}
}
struct SheetTwoButton: View {
@State private var showSheetTwo: Bool = false
var body: some View {
Button(action: { self.showSheetTwo = true } ) {
Image(systemName: "plus.circle.fill")
.font(.headline)
}.sheet(isPresented: self.$showSheetTwo) {
SheetTwo(showing: self.$showSheetTwo)
}
}
}