7

実装でいくつかの奇妙な不具合に直面していFormます。これが何らかの実装エラーなのか、SwiftUI 自体のバグなのかはわかりません。

だから基本的にやりたいことは、典型的な「ToDo/TimeTracking」アプリです。プロジェクト エンティティを参照する新しいタスク エンティティを作成したいと考えています。Formそのため、プロジェクトを選択し、タスクのタイトルとメモ、および開始日と終了日を設定できる場所 を作成しました。

しかし今、私はいくつかの視覚的な不具合を経験しています。

  1. でプロジェクトを選択すると、Picker(予想どおり) 別のビューにナビゲートされますが、ページ遷移アニメーションが終了した後、プロジェクトを選択できるリストが少し上に移動します。
  2. [既に完了] を選択してから日付を選択しDatePickerてピッカーを閉じると、ビューが非表示になる前にピッカーがビュー内でグリッチします。

次のコード スニペットを使用すると、実行可能な最小限の例を実現できます。

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 のバグなのか、私のコードのエラーなのかを知っているかもしれません。どんな助けでも大歓迎です。

バグのビデオ

4

1 に答える 1