swiftui TabView在设备

时间:2020-09-11 20:04:21

标签: ios swiftui

这是我问题的简化版本,我最初是在尝试迁移到swiftui时与现有项目碰到的。

我使用“ Tabbed App”启动一个新项目,选择“ swiftui”作为UI元素。

然后,我创建4个故事板文件,命名为“ Test1.storyboard” ..“ Test4.storyboard”,每个文件都有一个UIView控制器和一个带有“ Test 1” .....“ Test 4”的uilabel,我选中所有复选框上的“是初始视图控制器”。

要加载视图,我创建了UIViewControllerRepresentable的子类:

struct PlainStoryboardViewController: UIViewControllerRepresentable {
    
    var storyBoardName: String
    
    func makeUIViewController(context: Context) -> UIViewController {
        debugPrint("Showing \(self.storyBoardName)")
        let storyBoard = UIStoryboard(name: self.storyBoardName, bundle: nil)
        let vc = storyBoard.instantiateInitialViewController()!

        return vc
    }

    func updateUIViewController(_ pageViewController: UIViewController, context: Context) {
    }
}

现在,我只用我的PlainStoryboardViewController替换生成的ContentView中的Text(“ blah”),并添加其他2个额外的按钮,这就是我要做的所有...但是为了完整性,这里是:

struct ContentView: View {
    @State private var selection = 0
 
    var body: some View {
        TabView(selection: $selection){
            PlainStoryboardViewController(storyBoardName: "Test1")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("first")
                        Text("First")
                    }
                }
                .tag(0)
            PlainStoryboardViewController(storyBoardName: "Test2")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("second")
                        Text("Second")
                    }
                }
                .tag(1)
            PlainStoryboardViewController(storyBoardName: "Test3")
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "pencil")
                        Text("Third")
                    }
                }
                .tag(2)
            PlainStoryboardViewController(storyBoardName: "Test4")
                .font(.title)
                .tabItem {
                    VStack {
                        Image(systemName: "trash")
                        Text("Fourth")
                    }
                }
                .tag(3)
        }
    }
}

这似乎很简单,我希望当我单击4个按钮时加载相应的页面,这确实在模拟器iphone上完成,但是随后在ipad上失败了。

有时它会加载正确的页面,但是在大多数情况下,它只是刷新当前页面(我在原始项目中的ViewDidAppear下打印,但我认为此处执行的操作相同)。例如,我在“第二个”上,然后单击“第三个”,我希望它加载“测试3”,但是它将转到“测试3”或刷新“测试2”。您稍等片刻,然后重试,它会起作用或只是进行另一次刷新。

这已通过测试,并且在iOS 13.7下运行的iPad mini4和ipad pro 11.5英寸再现了该问题。但是,它也可以在ios 13.7下运行的iphone X正常工作。该项目是使用xcode 11.7部署目标13.7构建的。

1 个答案:

答案 0 :(得分:0)

确保指定.tabViewStyle(PageTabViewStyle()),以便TabView不使用iPad样式。