gpt4 book ai didi

FormView 中的 SwiftUI 故障

转载 作者:行者123 更新时间:2023-12-01 09:07:02 24 4
gpt4 key购买 nike

我的 Form 中遇到了一些奇怪的故障执行。我不确定这是一些实现错误还是 SwiftUI 本身的错误。

所以基本上我想做的是典型的“ToDo/TimeTracking”应用程序。我想创建一个引用项目实体的新任务实体。因此我创建了一个 Form我可以在其中选择一个项目,设置任务的标题和注释以及开始和结束日期。

但是现在我遇到了一些视觉故障。

  • 当我选择带有 Picker 的项目时我正在导航到一个单独的 View (如预期的那样),但是在页面转换动画完成后,我可以从中选择项目的列表向上移动一点。
  • 选择“已完成”,然后从 DatePicker 中选择日期时并关闭选择器,选择器在 View 隐藏之前会在 View 内部出现故障。

  • 可以使用以下代码片段实现最小可行示例:
    mport SwiftUI

    struct Project {
    let id: Int
    let title: String
    }

    let projects = [Project(id: 0, title: "Hello"),Project(id: 1, title: "World")]

    struct ContentView: View {

    @State private var showingCreateTask = false

    var body: some View {
    NavigationView {
    Text("Hello, World!")
    .navigationBarTitle("Test")
    .navigationBarItems(trailing: Button(action: { self.showingCreateTask.toggle() }) {
    Image(systemName: "plus").imageScale(.large)
    })
    .sheet(isPresented: self.$showingCreateTask) {
    CreateTaskView(projects: projects)
    }
    }
    }
    }

    struct CreateTaskView: View {

    let projects: [Project]

    @State private var selectedProject = 0
    @State private var taskTitle: String = ""
    @State private var taskNotes: String = ""
    @State private var alreadyFinished = false

    @State private var startDate = Date()
    @State private var endDate = Date()

    var body: some View {
    NavigationView {
    Form {
    Section {
    Picker(selection: $selectedProject, label: Text("Project")) {
    ForEach(0..<self.projects.count) { index in
    Text(self.projects[index].title)
    }
    }
    }

    Section {
    TextField("Title", text: $taskTitle)
    TextField("Notes", text: $taskNotes)
    Toggle(isOn: $alreadyFinished) {
    Text("Already finished ?")
    }
    }

    if alreadyFinished {
    Section {
    DatePicker(selection: $startDate, displayedComponents: [.date, .hourAndMinute]) {
    Text("Start Date")
    }
    DatePicker(selection: $endDate, in: startDate..., displayedComponents: [.date, .hourAndMinute]) {
    Text("End Date")
    }
    }
    }

    Button(action: {
    }) {
    Text("Save changes")
    }
    }
    .navigationBarTitle("Create a new task")
    }
    }
    }

    也许有人经历过类似的事情并且知道这是一个 SwiftUI 错误还是我的代码中的一些错误。任何帮助表示赞赏。

    Video of Bug

    最佳答案

    你可以这样改进它:

                           NavigationView {
    Form {
    Section {
    Picker(selection: $selectedProject, label: Text("Project")) {
    ForEach(0..<self.projects.count) { index in
    Text(self.projects[index].title).tag(index)
    }
    }
    }

    Section {
    TextField("Title", text: $taskTitle)
    TextField("Notes", text: $taskNotes)
    Toggle(isOn: $alreadyFinished) {
    Text("Already finished ?")
    }
    }

    Button(action: {
    }) {
    Text("Save changes")
    }

    if alreadyFinished {
    Section {

    DatePicker(selection: $startDate,in: startDate..., displayedComponents: [.date, .hourAndMinute]) {
    Text("Start Date")
    }}
    Section {
    DatePicker(selection: $endDate, in: startDate..., displayedComponents: [.date, .hourAndMinute]) {
    Text("End Date")
    }
    }.transition(AnyTransition.identity.animation(nil))
    }


    }
    .navigationBarTitle("Create a new task", displayMode: .inline)
    }

    关于FormView 中的 SwiftUI 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59512454/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com