SwiftUi Tabview 在开始时未正确加载该视图

Posted

技术标签:

【中文标题】SwiftUi Tabview 在开始时未正确加载该视图【英文标题】:SwiftUi Tabview not loading that views properly at start 【发布时间】:2022-01-17 12:38:12 【问题描述】:

我是 swiftui 和一般编程的新手,所以如果我没有使用正确的语言,请原谅。

我的问题是,一旦我的应用程序启动,它就会显示一个非常奇怪的视图,顶部有一个导航栏和一个空白屏幕。我必须来回滑动几次才能使应用程序按预期运行。这是问题的Video。

所以在我的内容视图文件中,我有一个标签栏,其中引用了我的其他 2 个视图。

TabView
            SearchPageView()
                .tabItem 
                    Image(systemName: "magnifyingglass")
                        .font(.system(size: 25, weight: .bold))
                
            
            MainPageView()
                .tabItem 
                    Image(systemName: "house")
                
            
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
            .ignoresSafeArea() 

我为每个视图创建了一个单独的文件。这两个视图都包含在 naviagtionView 中,因为稍后我使用导航链接导航到单独的视图。除了滚轮的类型外,两页的书写方式完全相同,一个是水平的,另一个是垂直的。

 NavigationView
            VStack
                Spacer()
                Text("Friends")
                    .foregroundColor(.white)
                    .font(.largeTitle)
                    .fontWeight(.bold)
                ScrollView(.horizontal,showsIndicators: false)
                    HStack
                        ForEach(users) users in
                           NavigationLink(destination: UserDisplayPage(user: users).navigationTitle("")
                                            .navigationBarHidden(true)
                                          
                           )
                                
                                VStack(alignment: .center)
                                    
                                    Image(users.imageName)
                                        .resizable()
                                        .aspectRatio( contentMode: .fill)
                                        .frame(width: imageSize, height: imageSize
                                        )
                                        .cornerRadius(imageSize/2)
                                        .overlay(
                                            Circle().stroke(Color.white, lineWidth: 5)
                                        )
                                        
                                        .padding()
                                    Text(users.name)
                                        .font(.title)
                                        .fontWeight(.bold)
                                        .foregroundColor(.white)
                                
                            
                        
                        
                    
                
                Spacer()
                
            .background(
                LinearGradient(colors: [.myPurple,.myCyan,.myOrange], startPoint: .topLeading, endPoint: .bottomLeading)
            )
                .navigationTitle("Good Evening, Nihal")
                .foregroundColor(.myOrange)
            
            
        

感谢任何帮助。提前致谢。

【问题讨论】:

【参考方案1】:

您应该删除 ContentView 中的 .tabViewStyle 修饰符。

TabView 在 SwiftUI 中有两个截然不同的角色。一种是管理标签栏,您可以点击标签栏中的图标来选择要显示的视图;另一种是提供可滑动的分页视图集合。

鉴于您在子视图中使用了NavigationView,我想说第一种样式就是您想要的样式。这是默认设置,所以删除样式修饰符(将选项卡视图切换到第二种形式),一切都会好起来的。您还应该能够删除 .ignoresSafeArea 修饰符。

【讨论】:

我按照你的建议做了,效果很好。但是,我想知道是否可以创建一个可滑动的 tabview 而不会出现导航错误。 删除 .tabViewStyle 将解决您的问题,但由于使用了导航视图,因此无法使用滑动/滑动效果。如果您从视图中删除 navigationView,您将能够滑动/滑动,但不能使用其他功能,例如工具栏项。

以上是关于SwiftUi Tabview 在开始时未正确加载该视图的主要内容,如果未能解决你的问题,请参考以下文章

TabView 在 iOS13 SwiftUI 上无法正常工作

SwiftUI TabView 如何在第二个选项卡单击时加载更多数据

ScrollView 中的 SwiftUI TabView

SwiftUI TabView 索引视图不尊重页面视图索引

swiftui TabView 在设备下呈现 UIViewControllerRepresentable 的意外行为

从核心数据中删除/添加到核心数据后,带有列表的 SwiftUI TabView 不刷新