0

我正在尝试创建一个 SwiftUI iOS 应用程序,其顶级导航链接和使用 .page 的 TabView 详细视图,因此我可以在选项卡之间滑动。是的,我知道 TabView 通常位于顶层,带有 NavigationLink 细节。

该应用程序在 iOS 模拟器中运行,但在我的 iPhone 上挂起/崩溃。

这是我想要工作的代码:

内容视图.swift

struct ContentView: View {

@State private var selection: String? = nil

var body: some View {
    NavigationView {
        VStack {
            NavigationLink(
                destination: DetailView(),
                tag: "tag1",
                selection: $selection) {
                    Text("Show Detail View")
                        .font(.largeTitle .bold())
                }
        }
    }
}

}

DetailView.swift

struct DetailView: View {

@State private var selectedTab = "one"

var body: some View {
    ZStack {
        // 3 main tabs
        TabView(selection: $selectedTab) {
            Text("Tab 1 View")
                .font(.largeTitle .bold())
                .tag("one")

            Text("Tab 2 View")
                .font(.largeTitle .bold())
                .tag("two")

            Text("Tab 3 View")
                .font(.largeTitle .bold())
                .tag("three")
        }
        // no dots
        .tabViewStyle(.page)
        // .tabViewStyle(PageTabViewStyle())
        // .id(UUID())

        VStack {
            Text("\(selectedTab)")
            Spacer()
        }
    }
}

}

简化的 DetailView 也以相同的方式崩溃:

简化的 detailView.swift

struct DetailView: View {
var body: some View {
    TabView {
        Text("Tab One")
            .font(.largeTitle .bold())
            .tag("one")

        Text("Tab Two")
            .font(.largeTitle .bold())
            .tag("two")
    }
    // no dots
    .tabViewStyle(.page)
}

}

当我在我的 iPhone 上运行它时,我可以选择 NavigationLink。它变暗然后挂起而不渲染detailView()。很久以后,我收到一个错误对话框,表明该应用程序由于内存问题而终止。

如果我删除 tabViewStyle 修饰符,应用程序将在设备上运行。当然,它默认为在设备底部带有控件的传统选项卡视图。

我在运行 macOS Monterey 12.2.1 (21D62) 的 M1 mac mini 上运行 Xcode 13.2.1 (13C100)。我在运行 iOS 15.3.1 的 iPhone 8 Plus 上运行。默认情况下,Xcode 具有 iOS 15.2 的 iOS 部署目标。

有什么建议么?

4

1 回答 1

0

使用 Picker 的示例:

struct DetailView: View {
    @State private var selection: Tab = .tabOne
    enum Tab {
        case tabOne
        case tabTwo
    }

    var body: some View {
        TabView(selection: $selection) {
            Text("Tab One")
                .font(.largeTitle .bold())
                .tag(Tab.tabOne)
            
            Text("Tab Two")
                .font(.largeTitle .bold())
                .tag(Tab.tabTwo)
        }
        // no dots
        .tabViewStyle(.page)
        Picker("Details", selection: $selection) {
            Image(systemName: "1.circle").tag(Tab.tabOne)
            Image(systemName: "2.circle").tag(Tab.tabTwo)
        }
        .pickerStyle(.segmented)
    }
}
于 2022-03-01T20:55:41.523 回答