问题描述
我正在尝试制作一个双向 TabView(带有 .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
),其数据源会随着时间的推移而改变。
以下是描述结果中预期内容的代码:
class TabsViewModel: ObservableObject {
@Published var items = [-2,-1,1,2]
@Published var selectedItem = 2 {
didSet {
if let index = items.firstIndex(of: selectedItem),index >= items.count - 2 {
items = items + [items.last! + 1]
items.removeFirst()
}
if let index = items.firstIndex(of: selectedItem),index <= 1 {
items = [items.first! - 1] + items
items.removeLast()
}
}
}
}
struct TabsView: View {
@StateObject var vm = TabsViewModel()
var body: some View {
TabView(selection: $vm.selectedItem) {
ForEach(vm.items,id: \.self) { item in
Text(item.description)
.frame(minWidth: 0,maxWidth: .infinity,minHeight: 0,maxHeight: .infinity,alignment: .topLeading
)
.background(Color(hue: .random(in: 0...0.99),saturation: .random(in: 0...0.99),brightness: 0.5))
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
在这种情况下,当您尝试转到下一页或上一页时,动画会中断,原始页面会立即返回到原来的位置。
在没有 UIKit 和第三方框架帮助的情况下,是否可以使用 TabView 完全实现这一点?
我猜测可能的解决方案之一是在过渡动画完成时更改数据源,但我找不到在 SwiftUI 中执行此操作的方法。
我的猜测正确吗?也许还有其他更优雅的方式来实现这个功能,但我的观点是错误的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)