为列表创建按钮

Create a button for a list

如何将(添加加载)按钮从列表中分离出来?我想根据需要将按钮放在其他地方,并将列表显示在底部或中心。当我从列表中删除“添加加载”按钮时,列表没有显示。有什么办法,我可以为列表创建一个固定大小,这样它就不会占据整个屏幕,只出现在屏幕的特定大小。

import SwiftUI

struct MainView: View {
    @State var br = Double()
    @State var loadpay = Double()
    @State var gp: Double = 0
    @State var count: Int = 1
    @State var listcheck = Bool()
    @StateObject var taskStore = TaskStore()
    func addNewToDo() {
        taskStore.tasks.append(Task(id: String(taskStore.tasks.count + 1), toDoItem: "load \(count)", amount: Double(gp)))
    }

    func stepcount() {
        count += 1
    }

    var body: some View {
        Form {
            HStack(spacing: 15) { Button(String(format: "Add Load"), action: { print("Load is ")

                gp += loadpay

            })
            Button(action: { addNewToDo(); stepcount() }, label: {
                Text("")
            })
            }

            ForEach(self.taskStore.tasks) {
                task in
                Text(task.toDoItem)
            }
        }
    }
}

struct Task: Identifiable {
    var id = String()
    var toDoItem = String()
    var amount: Double = 0
}

class TaskStore: ObservableObject {
    @Published var tasks = [Task]()
}

您可以将 Form 包裹在 VStack 中,并让 Button 成为 Form 的兄弟元素:

struct MainView: View {
    @State var br = Double()
    @State var loadpay = Double()
    @State var gp: Double = 0
    @State var count: Int = 1
    @State var listcheck = Bool()
    @StateObject var taskStore = TaskStore()
    
    func addNewToDo() {
        taskStore.tasks.append(Task(id: String(taskStore.tasks.count + 1), toDoItem: "load \(count)", amount: Double(gp)))
    }

    func stepcount() {
        count += 1
    }

    var body: some View {
        VStack {
            Button(action: { gp += loadpay }) {
                Text("Add Load")
            }
            Button(action: {
                addNewToDo()
            }) {
                Text("Add to do")
            }
            Form {
                ForEach(self.taskStore.tasks) {
                    task in
                    Text(task.toDoItem)
                }
            }
        }
    }
}