SwiftUI "Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)" при создании поп
Добрый вечер,
Здесь я хочу обсудить одну странную ситуацию. Я делаю приложение в SwiftUI, и проблема начинается с модальной навигации.
Вот пример моего кода:
Категории ListView
struct CategoriesListView: View {
@ObservedObject var viewModel: CategoriesListViewModel
@State private var searchedText = ""
@State private var showCancelButton: Bool = false
@GestureState private var dragOffset = CGSize.zero
var body: some View {
GeometryReader { [weak viewModel] geometry in
NavigationView {
ZStack(alignment: .leading) {
GeometryReader { geo in
Image("bg_shape")
.frame(width: geo.size.width, height: geo.size.height)
.position(x: geo.size.width / 2, y: geo.size.height / 4)
}
self.content(viewModel: viewModel)
}.navigationBarTitle("Categories", displayMode: .automatic)
.animation(.easeOut(duration: 0.3))
.navigationBarHidden(self.showCancelButton)
.navigationBarItems(leading: Button(action: {
viewModel?.dismiss.send(())
}) {
Image("button_arrow")
},trailing: Image("logo"))
.gesture(DragGesture().updating(self.$dragOffset, body: { (value, state, transaction) in
if(value.startLocation.x < 20 && value.translation.width > 100) {
viewModel?.dismiss.send(())
}
}))
}
}
}
CategoryProductsListView
struct CategoryProductsList: View {
@Environment(\.viewController) var viewRepresentative
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@ObservedObject var viewModel: CategoryProductListViewModel
@State private var searchedText = ""
@State private var showCancelButton: Bool = false
@State private var showModal: Bool = false
@GestureState private var dragOffset = CGSize.zero
var body: some View {
GeometryReader { [weak viewModel] geometry in
ZStack(alignment: .leading) {
GeometryReader { geo in
Image("bg_shape")
.frame(width: geo.size.width, height: geo.size.height)
.position(x: geo.size.width / 2, y: geo.size.height / 4)
}
self.content(viewModel: viewModel)
}.navigationBarTitle("Products", displayMode: .automatic)
.navigationBarHidden(self.showCancelButton)
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: Button(action: {
UITableView.appearance().rowHeight = UITableView.automaticDimension
self.presentationMode.wrappedValue.dismiss()
}) {
Image("button_arrow")
},trailing: Image("logo"))
.gesture(DragGesture().updating(self.$dragOffset, body: { (value, state, transaction) in
if(value.startLocation.x < 20 && value.translation.width > 100) {
UITableView.appearance().rowHeight = UITableView.automaticDimension
self.presentationMode.wrappedValue.dismiss()
}
}))
}.blur(radius: self.showModal ? 4 : 0)
}
Вот пример моей навигации по стеку:
CategoriesListView -> CategoryProductsListView -> ProductDetailView
На ProductDetaliView у меня есть кнопка, которая закрывает экран.
Button(action: {
self.presentationMode.wrappedValue.dismiss()}) {
Image("button_close")
}.buttonStyle(PlainButtonStyle()))
Ситуация 1:
Когда я модально представляю ProductDetailView и использую кнопку для отклонения, я возвращаюсь обратно в CategoriesListView, все в порядке.
Ситуация 2: Когда я модально представляю ProductDetailView и использую смахивание вниз, чтобы закрыть экран, я возвращаюсь обратно в CategoriesListView, и приложение вылетает без какого-либо журнала на экране журнала.
Кажется, это ошибка Swift UI, но я не нашел о ней никакой информации. Если у вас есть идеи, что это может быть, пожалуйста, помогите.
Хорошего дня!
РЕДАКТИРОВАТЬ:
Через несколько часов я нашел решение, проблема заключалась в изменении внешнего вида UINavigationBar.
Заключительный вопрос
1 ответ
Через несколько часов я нашел решение, проблема заключалась в изменении внешнего вида UINavigationBar.
Заключительный вопрос