如何在SwiftUI中创建动态PageViewController?

如何在SwiftUI中创建动态PageViewController?,swiftui,Swiftui,有人知道如何在SwiftUI、iOS 14中制作动态页面浏览控制器吗?显示与日期有关的页面的东西,这样人们可以向左或向右滚动查看过去、现在和未来的数据 struct-DatePg:View { 日期:日期 var body:一些观点{ 文本(日期.说明) } } 有一个新的API,允许您使用TabView和viewModifier创建PageViewController。但我看到的唯一例子是静态的。下面是一个静态页面视图的示例 导入快捷界面 结构SwiftUIPageView:视图 { @国家

有人知道如何在SwiftUI、iOS 14中制作动态页面浏览控制器吗?显示与日期有关的页面的东西,这样人们可以向左或向右滚动查看过去、现在和未来的数据

struct-DatePg:View
{
日期:日期
var body:一些观点{
文本(日期.说明)
}
}
有一个新的API,允许您使用TabView和viewModifier创建PageViewController。但我看到的唯一例子是静态的。下面是一个静态页面视图的示例

导入快捷界面
结构SwiftUIPageView:视图
{
@国家私有变量选择=0
var body:一些观点{
选项卡视图(选择:$selection){
文本(“你好”)
.frame(maxWidth:无穷大,maxHeight:无穷大)
.背景(颜色.蓝色)
.tag(0)
文本(“世界”)
.frame(maxWidth:无穷大,maxHeight:无穷大)
.背景(颜色.红色)
.标签(1)
}.tabViewStyle(PageTabViewStyle())
.indexViewStyle(PageIndexViewStyle(背景显示模式:。始终))
}
}
使用UIHostingController已经有了一些功能,但是通过UIKit对象传递NSManageObjectContext会带来问题

这就是我目前所处的位置。仍然不起作用

导入快捷界面
@主结构PagerApp:App
{
var body:一些场景{
窗口组{DatePageView()}
}
}
结构DatePageView:视图
{
@StateObject变量dateData=dateData(存在:Date())
@状态变量索引:Int=1
var body:一些观点{
选项卡视图(选择:$index){
ForEach(dateData.dates,id:\.self){datein
文本(日期.说明)
.onAppear{dateData.current(日期:date)}
.tag(dateData.tag(date:date))
}
}
.tabViewStyle(PageTabViewStyle())
.indexViewStyle(PageIndexViewStyle(背景显示模式:。始终))
}
}
类DateData:ObservableObject
{
@发布风险值日期:[日期]
初始(当前:日期){
让过去=现在
让future=present.nextDay()
self.dates=[过去、现在、未来]
}
当前函数(日期:日期){
//围绕
guard let i=dates.firstIndex(of:date)else{fatalError()}
self.dates=[dates[i]。上一天(),日期[i],日期[i]。下一天()
打印(“在\(i)出现时制作项目”)
}
func标记(日期:date)->Int{
guard let i=dates.firstIndex(of:date)else{fatalError()}
返回i
}
}

您可以使用数组和
ForEach
动态创建视图

以下是使用字符串数组的示例:

//请参见编辑的部分
您可以在视图初始值设定项中传递所需的项

编辑:
以下是每次到达最后一个页面时添加新页面的示例:

struct SwiftUIPageView:视图
{
@国家私有变量选择=“0”
@状态变量项:[字符串]=[“0”、“1”、“2”、“3”]
var body:一些观点{
选项卡视图(选择:$selection){
ForEach(items,id:\.self){item in
文本(项目)
.frame(maxWidth:无穷大,maxHeight:无穷大)
.背景(颜色.红色)
.标签(项目)
}
}.tabViewStyle(PageTabViewStyle())
.indexViewStyle(PageIndexViewStyle(背景显示模式:。始终))
.onChange(of:selection,perform:{value in
如果Int(值)=(self.items.count-1){
self.items.append(“\(self.items.count)”)
}
})
.id(项目)
}
}

最后一个
id(items)
很重要,因为它会在阵列更改时强制重新加载视图。

这很酷,但仍然是静态的。有没有一种方法可以使数据源动态并使用ForEach?我们的想法是,过去向左滑动一天,将来向右滑动一天。每次到达最后一个视图时,我都会动态添加一个视图,但添加后,由于整个视图都已渲染,因此没有动画,请检查编辑器。您找到解决方案了吗?我正在尝试实现相同的功能