Мое приложение продолжает вылетать, когда я меняю ориентацию устройства, если раньше я установил scrollPosition
. Мой ContentView()
выглядит примерно так - где я читаю размер дисплея.
GeometryReader { display in
VStack {
HeaderView()
MainScrollView(display: display)
FooterView()
}
}
Передача display
в MainScrollView()
, где - внутри ScrollViewReader
оператор if-else
проверяет, должен ли он загружать PortraitMainView()
или `LandscapeMainView ()
struct MainScrollView: View {
var display: GeometryProxy
var body: some View {
ScrollViewReader { scrollPosition in
ZStack {
ScrollView {
if display.size.width > display.size.height {
LandscapeMainView()
} else {
PortraitMainView()
}
}
Button(action: {
withAnimation {
scrollPosition.scrollTo("C", anchor: .top)
}
}, label: {
Text("Scroll to Position C")
} )
}
}
}
}
LandscapeMainView () и PortaitMainView () выглядят так:
LandscapeMainView: View {
var body: some View {
VStack {
Text("Item A")
.id("A")
Text("Item B")
.id("B")
Text("Item C")
.id("C")
Text("Item D")
.id("D")
Text("Item E")
.id("E")
}
}
}
Все работает нормально, я могу перевернуть ориентацию, и она меняется с LandscapeMainView()
на PortraitMainView()
и наоборот. Кроме того, установка scrollPosition
прекрасно работает в ландшафтном и портретном режимах. Только после того, как я установил scrollPosition
и затем изменил ориентацию, мое устройство зависает, давая мне Thread 1: EXC_BAD_ACCESS (code=1, address=0x30)
в качестве вывода. Экран по-прежнему показывает портретный режим с наклоном к Альбомной, оставляя половину экрана пустой. Есть ли лучший способ управлять ориентацией экрана и прокруткой в SwiftUI?
GeometryProxy
в свойMainScrollView
. У меня была аналогичная проблема, так что это всего лишь предположение - person Dima Rostopira   schedule 28.12.2020