在 SwiftUI 中使用分段式选取器在两个页面之间滑动

Geo*_*e_E 4 ios uipageviewcontroller swift swiftui uiviewrepresentable

我有一个Pickerwith.pickerStyle(SegmentedPickerStyle())使其成为分段控件。我想让页面在之间平滑滑动,而不是使用条件语句替换视图。

这是我迄今为止所做的 gif:

我做了什么

这是到目前为止的代码(由 控制if,而不是在不同页面之间切换):

struct AuthView: View {

    @State private var authPath = 0

    /* ... */

    var body: some View {
        VStack {
            Picker(selection: $authPath, label: Text("Authentication Path")) {
                Text("Log In").tag(0)
                Text("Sign Up").tag(1)
            }
            .pickerStyle(SegmentedPickerStyle())

            Spacer()

            if authPath == 0 {
                LogInView(/* ... */)
            } else {
                SignUpView(/* ... */)
            }

            Spacer()
        }
        .padding()
        .background(Color("Color.Background").edgesIgnoringSafeArea(.all))
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西UIPageViewController。如果有 SwiftUI 版本或好的替代方案,那确实会有帮助。

但是,如果我确实需要使用 UIKit UIViewRepresentable,我不知道如何使用 SwiftUI 来实现它。

lle*_*ram 6

我通过创建两者来实现这一点PickerTabView如下所示:

struct ContentView: View {
    @State private var selectedPage: Int = 0

    var body: some View {
        VStack {
            Picker("", selection: $selectedPage) {
                Text("First").tag(0)
                Text("Second").tag(1)
                Text("Third").tag(2)
            }.pickerStyle(.segmented)
                
            TabView(selection: $selectedPage) {
                FirstView().tag(0)
                    
                SecondView().tag(1)
                    
                ThirdView().tag(2)
            }.tabViewStyle(.page)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和 都Picker共享TabView相同的选择状态,因此当Picker选择或TabView滚动时,另一个也会发生变化。