List 光明:,无限, 对齐:。顶部引导 ) } } 结构cl_任务_预览:PreviewProvider{ 静态var预览:一些视图{ cl_任务().previewLayout(.sizeThatFits) } }

List 光明:,无限, 对齐:。顶部引导 ) } } 结构cl_任务_预览:PreviewProvider{ 静态var预览:一些视图{ cl_任务().previewLayout(.sizeThatFits) } },list,swiftui,List,Swiftui,为了测试并显示海量数据没有问题,我预加载了10000行。够了吗 您的问题: import SwiftUI struct Item { let uuid = UUID() let value: String } struct w_tasks: View { @State private var items = [Item]() var body: some View { ZStack(alignment:

为了测试并显示海量数据没有问题,我预加载了10000行。够了吗

您的问题:

import SwiftUI

struct Item {
    let uuid = UUID()
    let value: String
}

struct w_tasks: View {
    
    @State private var items = [Item]()
      
   
      var body: some View {
          ZStack(alignment: .leading){
                    List(self.items, id: \.uuid) {item in
                        cl_task().listRowInsets(EdgeInsets())
                    }
                    .listStyle(SidebarListStyle())
                    .frame(width: UIScreen.main.bounds.width )
                    .onAppear {
                      
                        DispatchQueue.main.async {
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                        }
               
                    }
              VStack {
                  Spacer()

                  HStack {
                      Spacer()

                      Button(action: {
                          self.items.append(Item(value: "Item"))
                      }, label: {
                          Text("+")
                          .font(.system(size: 30))
                          .frame(width: 50, height: 50)
                          .foregroundColor(Color.white)
                          .padding(.bottom, 5)
                      })
                      .background(Color(hex : "#216D94"))
                      .frame(width: 50, height: 50)
                      .cornerRadius(25)
                      .padding()
                      .shadow(color: Color.black.opacity(0.3),
                              radius: 3,
                              x: 3,
                              y: 3)
                  }
              }
          }.background(Color.black)
      }
}

struct w_tasks_Previews: PreviewProvider {

    static var previews: some View {
        w_tasks()
    }
}
import SwiftUI

struct cl_task: View {
    @State private var offset: CGSize = .zero
  
    var body: some View {
        //Swipe to custom options ,by "Jack" this option not yet available in SwiftUI
        let drag = DragGesture(minimumDistance: 25, coordinateSpace: .local)
       
                   .onChanged {
                    
                    if (self.offset.width > 0 ){  return }
                    self.offset.width = $0.translation.width
                
                   }.onEnded {
                   if $0.translation.width < -100 {
                       self.offset = .init(width: -100, height: 0)
                   } else {
                      self.offset = .zero
                   }
               }
        ZStack{
            Rectangle().foregroundColor(.blue).offset(x: offset.width, y: offset.height)
                .gesture(drag)
                .animation(.easeIn, value: offset)
            Text("test").foregroundColor(.white)
        }.frame(minWidth: 0,
                maxWidth: .infinity,
                minHeight: 120,
                maxHeight: .infinity,
                alignment: .topLeading
        )
    }
}

struct cl_task_Previews: PreviewProvider {
    static var previews: some View {
        cl_task().previewLayout(.sizeThatFits)
    }
}
1.你应该让你的项目类型可以识别,然后你可以从你的列表或ForEach中输出uuid

2.您不应该为行指定帧大小,它们可以自动占用最大空间

3.你可以把你的按钮放在你的视图上,然后像我一样保存更多的编码

4.不应使用CGSize作为偏移量,因为您只需处理一维,CGFloat就足够了

5.你应该而且必须使用LazyVStack如果你的数据是海量的,就像你说的400对多,那么一定要使用LazyVStack




struct行视图:视图{
让stringOfText:String
@国家私有变量偏移量:CGFloat=CGFloat()
var body:一些观点{
ZStack{
蓝色
文本(stringOfText)
.foregroundColor(颜色.白色)
.padding()
}
.偏移量(x:偏移量)
.手势(德拉格斯特尔)
}
瓦尔·德拉格斯特尔:一些手势{
DragGesture(最小距离:25,坐标空间:本地)
.一旦改变{
如果(偏移量>0){return}
偏移量=$0.0.0转换宽度
}.ONENED{
如果$0.5,则宽度<-100{
偏移量=-100
}否则{
偏移量=0
}
}
}
}

为什么使用DispatchQueue.main.async{?因为您可以只使用items.append(Item(值:“Item”))添加值。为什么要调度队列?我确实尝试过查看行之间的分隔符是否从主线程返回,但它返回了,因为我添加了NavigationView您可以通过不使用列表来解决问题,如果可以的话,我可以help@swiftPunk,如果阵列有超过400个元素,这会影响性能吗?我在发布m你的回答解决了我在你的代码中发现的所有问题
    struct Item {
    let uuid = UUID()
    let value: String
}

struct w_tasks: View {
    
    @State private var items = [Item]()
      
   
      var body: some View {
          ZStack(alignment: .leading){
           // List(self.items, id: \.uuid)
                    List {
                        ForEach(self.items, id: \.uuid) { item in
                            cl_task().listRowInsets(EdgeInsets(.init(top: 20, leading: -20, bottom: 20, trailing: -20)))
                            
                            .frame(height: 50)
                        }
                            
                    }
                    .listStyle(InsetListStyle())
                    
                    
                    .frame(width: UIScreen.main.bounds.width )
                    .onAppear {
                      
                        DispatchQueue.main.async {
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                            self.items.append(Item(value: "Item"))
                        }
               
                    }
              VStack {
                  Spacer()

                  HStack {
                      Spacer()

                      Button(action: {
                          self.items.append(Item(value: "Item"))
                      }, label: {
                          Text("+")
                          .font(.system(size: 30))
                          .frame(width: 50, height: 50)
                          .foregroundColor(Color.white)
                          .padding(.bottom, 5)
                      })
                      .background(Color("#216D94"))
                      .frame(width: 50, height: 50)
                      .cornerRadius(25)
                      .padding()
                      .shadow(color: Color.black.opacity(0.3),
                              radius: 3,
                              x: 3,
                              y: 3)
                  }
              }
          }.background(Color.black)
      }
}

struct w_tasks_Previews: PreviewProvider {

    static var previews: some View {
        w_tasks()
    }
}



struct cl_task: View {
    @State private var offset: CGSize = .zero
  
    var body: some View {
        //Swipe to custom options ,by "Jack" this option not yet available in SwiftUI
        let drag = DragGesture(minimumDistance: 25, coordinateSpace: .local)
       
                   .onChanged {
                    
                    if (self.offset.width > 0 ){  return }
                    self.offset.width = $0.translation.width
                
                   }.onEnded {
                   if $0.translation.width < -100 {
                       self.offset = .init(width: -100, height: 0)
                   } else {
                      self.offset = .zero
                   }
               }
        ZStack{
            Rectangle().foregroundColor(.blue).offset(x: offset.width, y: offset.height)
                .gesture(drag)
                .animation(.easeIn, value: offset)
            Text("test").foregroundColor(.white)
        }.frame(minWidth: 0,
                maxWidth: .infinity,
                minHeight: 120,
                maxHeight: .infinity,
                alignment: .topLeading
        )
    }
}

struct cl_task_Previews: PreviewProvider {
    static var previews: some View {
        cl_task().previewLayout(.sizeThatFits)
    }
}
struct Item: Identifiable {

  let id: UUID = UUID()
  let value: String

}
struct ContentView: View {
    
    @State private var items: [Item] = [Item]()
    
    var body: some View {
        
        ZStack {
            
            Color.black.ignoresSafeArea()
            
            ScrollView {
                LazyVStack(spacing: 0) {
                    
                    ForEach(items) {item in
                        
                        RowView(stringOfText: item.value)
                            .frame(height: 120)
                    }
                    
                }
                
            }
            .background(Color.black)
            .onAppear() { for _ in 0...10_000 { addNewData() } }
            
            
            
        }
        .overlay(addButton, alignment: .bottomTrailing)
        .animation(.easeInOut)
        
    }
    
    var addButton: some View {
        
        Button(action: { addNewData() }, label: {
            Image(systemName: "plus.circle").foregroundColor(Color.white).font(Font.largeTitle.weight(Font.Weight.bold)).padding()
        })
        
        
    }
    
    func addNewData() { items.append(Item(value: "item " + items.count.description)) }
}
struct RowView: View {
    
    let stringOfText: String
    
    @State private var offset: CGFloat = CGFloat()
    
    var body: some View {
        
        ZStack {
            
            Color.blue
            
            Text(stringOfText)
                .foregroundColor(Color.white)
                .padding()
        }
        .offset(x: offset)
        .gesture(dragGesture)
        
    }
    
    var dragGesture: some Gesture {
        
        DragGesture(minimumDistance: 25, coordinateSpace: .local)
            
            .onChanged {
                if (offset > 0 ){  return }
                offset = $0.translation.width
                
            }.onEnded {
                if $0.translation.width < -100 {
                    offset = -100
                } else {
                    offset = 0
                }
            }
        
    }
  
}