首页 > 解决方案 > SwiftUI 的 tabViewStyle PageView 不适用于纵向到横向的旋转

问题描述

使用Swift5.5、iOS15.0.1、

在 SwiftUI 中创建 PageView 仍然不是那么简单——即使在 2021 年秋季也是如此。

Apple 让我们可以滥用带有特殊修饰符的 TabView 来创建 PageView

修改器被调用.tabViewStyle(.page(indexDisplayMode: .always)),并且在您将手机从纵向旋转到横向之前它会起作用。

Apple 不知何故没有想到使用此 API 进行纵向到横向的旋转。

旋转手机完全弄乱了页面索引!

下面是这个例子的完整代码。尝试自己旋转手机。

看视频:

为了在旋转后保持索引完好无损,您需要做什么?

--> 拜托,我不是要重新获得索引。我说的是围绕当前索引进行的漂亮,平滑的旋转(不是某种需要存储索引并在旋转后再次重新分配的变通方法......)

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            ScrollView(.init()) {
                TabView {
                    Text("Hello 1")
                    Text("Hello 2")
                    Text("Hello 3")
                    Text("Hello 4")
                }
                .id(UUID())
                .tabViewStyle(.page(indexDisplayMode: .always))
            }            
            .ignoresSafeArea()
            .transition(.move(edge: .bottom))
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

标签: swiftuitabviewios15pagetabviewstyle

解决方案


推荐阅读