如何解决滚动视图嵌套在 TabView 重置位置以在更改选项卡时开始
我正在试验 SwiftUI,发现嵌套在 TabView 中时 ScrollView 有一种奇怪的行为。如果我向下滑动 ScrollView 然后做一个缓慢的手势滑动到下一个选项卡,它有时会将 scrollView 位置重置为开始。我不知道如何很好地解释它,所以这是一个 gif:
我正在尝试了解导致这种情况的原因,以及是否有办法避免这种情况。 这是我使用的代码:
var body: some View {
TabView(selection: $selectedTab,content: {
ForEach(coreData.pageList,id: \.self) { page in
if(coreData.pageList[page] == nil) {
ProgressView().onAppear(perform: {
loadPage(page: page)
})
} else {
ScrollView {
Text("START OF PAGE ------- -----Page Number: \(page)! This is a very short text made big to simulate scrolling. This is a very short text made big to simulate scrolling. ").font(.system(size: 90))
}
}
}
})
}
我是否遗漏了一些简单的东西,它是一个错误(有解决方法),我使用这些视图是否错误?
最终,我只想让页面看起来像您向右或向左滑动的页面,但如此快速地重置滚动位置不会带来很好的用户体验,而且看起来也不是很好
编辑:我还没有找到任何解决方案,但有趣的一点是:如果我将 ProgressView 放在 scrollView 中,则滚动视图不会重置位置,但下一个选项卡将已经与与预览页面相同的数量。如果不是更糟的话,这同样是“糟糕的”:-(.
解决方法
尝试将其放入单独的视图中(传递所有需要的参数),以便 SwiftUI 会看到该视图未更改,因此不会重新渲染它,即。它应该看起来像
if(coreData.pageList[page] == nil) {
ProgressView().onAppear(perform: {
loadPage(page: page)
})
} else {
DetailsView(page: page) // << ScrollView inside
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。