相关疑难解决方法(0)

当@State var 更改时,带有“PageTabViewStyle”的 TabView 不会更新其内容

我在 SwiftUI 中遇到了一个奇怪的问题。我创建了一个简单的 View,它只包含一个 Button 和一个使用 PageViewStyle 的 TabView。TabView 似乎没有根据变量的状态正确更新其内容。似乎内容以某种方式更新,但视图不会像我期望的那样更新

这是我的视图代码:

struct ContentView: View {
    @State var numberOfPages: Int = 0
    @State var selectedIndex = 0
    
    var body: some View {
        VStack {
            Text("Tap Me").onTapGesture(count: 1, perform: {
                self.numberOfPages = [2,5,10,15].randomElement()!
                self.selectedIndex = 0
            })
            
            TabView(selection: $selectedIndex){
                ForEach(0..<numberOfPages, id: \.self) { index in
                    Text("\(index)").background(Color.red)
                }
            }
            .frame(height: 300)
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
        }.background(Color.blue)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是多次点击标签后的结果。初始状态不是 0 页。在您点击后,我希望 TabView 的内容发生变化,因此所有页面都将是可滚动和可见的,但由于某种原因,只有页面指示器会更新它的状态。

在此处输入图片说明

tabview swiftui

7
推荐指数
1
解决办法
2344
查看次数

如何使用 SwiftUI 从 TabView 内的 ForEach 中删除项目?

我遇到了一个奇怪的 SwiftUI 崩溃,我不明白。我有一个 TabView,其中包含 3 个图像的列表。我试图通过点击屏幕上的按钮从列表中删除第一张图像,但我遇到了这个崩溃。

'NSInternalInconsistencyException',原因:'尝试删除并重新加载相同的索引路径(<NSIndexPath:0x968bfe135e5a98d1> {length = 2,path = 0 - 0})'以未捕获的NSException类型异常终止

如果我从代码中删除 TabView,它会按预期工作并删除第一项。以下是重现此崩溃所需的最少代码量。我还在这里创建了此代码的 Git 存储库 -> https://github.com/cameronhenige/TestCrash有人可以帮我弄清楚发生了什么吗?

import SwiftUI

struct ContentView: View {
    @StateObject var testViewModel = TestViewModel()
    
    var body: some View {
        GeometryReader { proxy in
            
            ScrollView {
                
                VStack(alignment: .leading, spacing:0) {
                    
                    TabView {
                        
                        ForEach(testViewModel.images, id: \.self) { image in
                            Image(image)
                        }
                        
                    }.tabViewStyle(PageTabViewStyle())
                    .clipShape(RoundedRectangle(cornerRadius: 15))
                    .padding()
                    .frame(width: proxy.size.width, height: proxy.size.height/2.5)
                    
                }
                Button(action: {
                    testViewModel.removeFirst()
                }) {
                    Text("Remove first item from list")
                }
                
            }
            
            
        }.frame(maxWidth: .infinity).background(Color.black) …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-tabview

5
推荐指数
1
解决办法
908
查看次数

标签 统计

swiftui ×2

swiftui-tabview ×1

tabview ×1