SwiftUI 应用程序在两个选择器周围出现 VStack 崩溃
Posted
技术标签:
【中文标题】SwiftUI 应用程序在两个选择器周围出现 VStack 崩溃【英文标题】:SwiftUI App crashes with a VStack around two pickers 【发布时间】:2020-07-26 10:49:17 【问题描述】:我已经找到了解决方案,但仍然想了解问题是什么,以便能够将其转移到类似的问题。
以这个示例代码为例:
import SwiftUI
struct ContentView: View
private var days = Array(1...31)
@State private var selectedDay = 1
private var months = [ "January", "February", "March", "April", "May", "June" ]
@State private var selectedMonth = "January"
var body: some View
NavigationView
Form
VStack
Picker("Select day", selection: $selectedDay)
ForEach(self.days, id: \.self) day in
Text(String(day))
Picker("Select month", selection: $selectedMonth)
ForEach(self.months, id: \.self) month in
Text(month)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
如果您随后点击任何选择器,应用程序将在几秒钟后崩溃并显示 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed371fd8)
。
解决方案是移除 VStack。
但我仍然想了解如果有 VStack,应用程序为什么会崩溃?
添加 VStack 有什么问题?
【问题讨论】:
【参考方案1】:Form
实际上是 List
并且 Form 的视图构建器中的每个 View 都被放入行中,因此将两个选择器组合到 VStack 中会导致将两个选择器放入一行中,当您点击该行时,选择器列表应该是显示? ...未知 - 因此这是崩溃的原因。
如果您想在表单中组合此类视图,请使用Section
,例如
Form
Section
Picker("Select day", selection: $selectedDay)
ForEach(self.days, id: \.self) day in
Text(String(day))
Picker("Select month", selection: $selectedMonth)
ForEach(self.months, id: \.self) month in
Text(month)
【讨论】:
所以,如果我猜对了:如果我添加 VStack 并点击一个 Picker,那么点击不会单独发送到这个 Picker,而是发送到该行中的所有视图? 至少如果你把两个按钮放在同一个场景中,那么两个动作都会被激活,所以是的,类似的事情,但更具破坏性,也会发生在选择器上。以上是关于SwiftUI 应用程序在两个选择器周围出现 VStack 崩溃的主要内容,如果未能解决你的问题,请参考以下文章