Swiftui表单视图跳转错误

问题描述 投票:1回答:1

我遵循Raywenderlich教程时遇到问题。每次我单击一个项目时,表单视图都会自动向上跳一点。这是错误吗?反正有解决办法吗?代码如下。在Contentview中,我使用了GroupedListStyle()列出所有项目。 我的xcode版本是11.2,Swift 5。

enter image description here

下面是TaskEditingView.swift

import SwiftUI

struct TaskEditingView: View {
    @Binding var task: Task

    var body: some View {
        Form {
            TextField("Name", text:$task.name)
            Toggle("Completed", isOn: $task.completed)
        }
    }
}

struct TaskEditingView_Previews: PreviewProvider {
    static var previews: some View {
        TaskEditingView(task: .constant(Task(name: "TO DO")))
    }
}

下面是ContentView.swift

import SwiftUI

struct ContentView: View {
    @ObservedObject var taskStore: TaskStore
    @State var modalIsPresented = false

    var body: some View {
        NavigationView {
            List {
                ForEach(taskStore.tasks) { index in
                    RowView(task: self.$taskStore.tasks[index])
                }
                .onMove { sourceIndices, destinationIndex in
                    self.taskStore.tasks.move(
                        fromOffsets: sourceIndices,
                        toOffset: destinationIndex
                    )
                }
                .onDelete { indexSet in
                    self.taskStore.tasks.remove(atOffsets: indexSet)
                }
            }
            .navigationBarTitle("Tasks")
            .navigationBarItems(
                leading: EditButton(),
                trailing:
                Button(
                    action: { self.modalIsPresented = true }
                ) {
                    Image(systemName: "plus")
                }
            )
        }
        .sheet(isPresented: $modalIsPresented) {
            NewTaskView(taskStore: self.taskStore)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView( taskStore: TaskStore() )
    }
}

下面是RowView.swift

import SwiftUI

struct RowView: View {
    @Binding var task: Task

    let checkmark = Image(systemName: "checkmark")

    var body: some View {
        NavigationLink(
            destination: TaskEditingView(task: $task)
        ) {
            if task.completed {
                checkmark
            } else {
                checkmark.hidden()
            }

            Text(task.name)
                .strikethrough(task.completed)
        }
    }
}

struct RowView_Previews: PreviewProvider {
  static var previews: some View {
    RowView(
      task: .constant( Task(name: "To Do") )
    )
  }
}

ContentView.swift-> RowView.swift-> TaskEditingView.swift

ios swift xcode storyboard swiftui
1个回答
0
投票

解决方法

根据我的发现,这看起来像Form布局问题,因此,作为以下临时解决方法,有人可能会发现适用的解决方法:

Form {
    TextField("Name", text:$task.name)
    Toggle("Completed", isOn: $task.completed)
}
.navigationBarTitle("", displayMode: .inline) // !!!
© www.soinside.com 2019 - 2024. All rights reserved.