SwiftUI中如何自动重复页面视图

4
我有一个SwiftUI项目。我正在使用pageview。通常情况下,当到达最后一页时,由于页面已经完成,它不会再滚动。我的要求是:达到最后一页后,页面继续向后滚动,从第一页重新开始。因此,我希望我的页面顺序如下所示: 页1->页2->页3->页1->页2->页3->页1...... 我希望它一直像这样重复下去。
struct PageControllerView: View {
    var body: some View {
        TabView {
            Text("page 1")
            Text("page 2")
            Text("page 3")
        }
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
    }
}

我猜这个视频可以解决你的问题:https://www.youtube.com/watch?v=Yg2wh9uJ9Fk - L. Puzer
1个回答

0

你需要使用带有选择的TabView

struct PageControllerView: View {
    @State var selection = 1
    var body: some View {
        TabView(selection: $selection) {
            Text("page 3").tag(0) //same as last view for swipe effect
            Text("page 1").tag(1)
            Text("page 2").tag(2)
            Text("page 3").tag(3)
            Text("page 1").tag(4) //same as first view for swipe effect
            
        }//.tabViewStyle(PageTabViewStyle()) BTW, You don't need that
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
        .onChange(of: selection) { newValue in
            if selection == 4 { //last tag + 1
                selection = 1 //first tag
            }else if selection == 0 { //first tag - 1
                selection = 3 //last tag
            }
        }
    }
}

这也适用于 ForEach,但不要忘记选择一个合适的tag


好尝试,但是将全屏可见视图(例如颜色)放在页面上,并在滑动时会发现它的行为不佳 - 只有一半空白的“存根”页面,然后跳到下一页...但是如果它能正常工作就太棒了。 - Asperi
啊,是的,我现在明白了... - Timmy
如果有解决方案,我可以在foreach中使用它。由于页面上会有图片,用户不应该注意到。 - ursan526

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接