在 SwiftUI 中,如何将选项卡放在视图顶部的 TabbedView 中?

J. *_*ell 5 view tabbed swiftui

我有一个底部带有选项卡的视图,其中一个viewshas subviews,为了在视觉上分离逻辑,我使用以下代码将子视图的选项卡放在视图的顶部,它完美地工作:

self.tabbar.frame = CGRect( x: 0,
                            y: view.safeAreaInsets.top,
                            width: self.view.frame.size.width,
                            height: 50)
Run Code Online (Sandbox Code Playgroud)

我如何做到这一点SwiftUI

Fog*_*ter 5

为此,您可以将选项卡视图创建为单个选项卡的容器,例如...

struct TabbedView: View {

    @State private var selectedTab: Int = 0

    var body: some View {
        VStack {
            Picker("", selection: $selectedTab) {
                Text("First").tag(0)
                Text("Second").tag(1)
                Text("Third").tag(2)
            }
            .pickerStyle(SegmentedPickerStyle())

            switch(selectedTab) {
                case 0: FirstTabView()
                case 1: SecondTabView()
                case 2: ThirdTabView()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做,您将根据分段控件的值有条件地填充“标签页”。

通过使用@State$selectedTab分段控件将更新 selectedTab 值,然后重新呈现将根据新值替换页面的视图selectedTab

编辑

开关现在可以在 SwiftUI 测试版中使用。

  • 不幸的是,至少在 b1 中,我们不能在 ViewBuilders 中使用 switch。`包含控制流语句的闭包不能与函数构建器'ViewBuilder'一起使用` (2认同)
  • @Fogmeister,你从哪里得到SegmentedControl? (2认同)