Swiftui Form View跳出错误 [英] Swiftui Form View jump up bug

查看:72
本文介绍了Swiftui Form View跳出错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I had a problem when following Raywenderlich Tutorial. The form view will automatically jump upward a little bit every time i clicked an item. Is this a bug? Is there anyway to solve it? The code is below. And in Contentview, i used a GroupedListStyle() to list all the items. My xcode version is 11.2, Swift 5.

下面是TaskEditingView.swift

Below is 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

Below is 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

Below is 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

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

推荐答案

如果在表单内部使用节",则跳过的bug消失了. 如果您使用空的节的页眉和页脚,应该看起来像您一样.

If you use a Section Inside of a form, the jumping bug is gone. If you use empty header and footer of a section, it should be look like you do it.

Form{
       Section(header: Text(""), footer: Text(""), content: {
           Text(...)
           Toggle(...)
       })
    }

这篇关于Swiftui Form View跳出错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆