【发布时间】:2020-04-18 02:45:23
【问题描述】:
我在我的Form 实现中遇到了一些奇怪的故障。我不确定这是一些实现错误还是 SwiftUI 本身的错误。
所以基本上我想做的是典型的“ToDo/TimeTracking”应用程序。我想创建一个引用项目实体的新任务实体。因此我创建了一个Form,我可以在其中选择一个项目,设置任务的标题和注释以及开始和结束日期。
但现在我遇到了一些视觉故障。
- 当我选择带有
Picker的项目时,我将导航到一个单独的视图(如预期的那样),但在页面过渡动画完成后,我可以从中选择项目的列表稍微向上移动。 - 选择“已经完成”时,然后从@ 987654327选择日期并关闭拾取器时,在隐藏之前,在视图内部的拾取器故障。
可以使用以下代码 sn-p 来实现一个最小的可行示例:
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 错误还是我的代码中的一些错误。任何帮助表示赞赏。
【问题讨论】:
-
当我使用 Picker 选择一个项目时,我被导航到一个单独的视图(如预期的那样),但是我可以从中选择项目的列表在页面过渡动画之后向上移动一点完成。您是在模拟器中还是在设备上看到它?加载后似乎完成了一些布局,然后 2 个字段向上移动。但在设备上不应该被注意到。
-
不幸的是,与模拟器中相同的故障也发生在设备上。
-
我遇到了同样的问题,这很有效:stackoverflow.com/a/58982296/12202752希望它有所帮助。
标签: swift swiftui swiftui-form