ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)
Posted
技术标签:
【中文标题】ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)【英文标题】:ScrollView acting weired (Xcode 11 GM seed - SwiftUI) 【发布时间】:2019-09-13 02:11:05 【问题描述】:我正在尝试制作自定义列表。如果我们在 scrollView 中添加 Encapsulated VStack 并尝试从该 VStack 添加新行,它的行为就会很奇怪。但是我们必须封装,因为在 Xcode 中会给出“复杂视图编译器错误”。我提供了完整的代码以便更好地理解。请尝试运行它。新元素没有按预期添加,它推动一切向上。
struct RowView: View
var body: some View
VStack
HStack
Spacer()
.foregroundColor(Color.black)
Spacer()
.background(Color.white)
.cornerRadius(13)
.padding()
struct cView:View
@State var array: [String] = []
@State var height: CGFloat = 60
var body: some View
VStack
Button(action:
self.array.append("Test")
, label:
Text("Add")
)
VStack
ForEach(array, id: \.self)_ in
RowView()
.background(Color.red)
.cornerRadius(13)
.padding()
struct ContentView : View
@State var array: [String] = []
var body: some View
ScrollView
VStack
Text("d")
.frame(height: 90)
VStack
cView()
.navigationBarTitle("Test", displayMode: .automatic)
【问题讨论】:
【参考方案1】:当我重新格式化并删除未使用的东西时,我得到了:
struct RowView: View
let text: String
var body: some View
VStack
HStack
Spacer()
Text(text).foregroundColor(Color.black)
Spacer()
.background(Color.white)
.cornerRadius(13)
.padding()
struct cView:View
@State var array: [String] = []
@State var height: CGFloat = 60
var body: some View
VStack
Button(
action: self.array.append("Test") ,
label: Text("Add")
)
ForEach(array, id: \.self)text in
RowView(text: text)
.background(Color.red)
.cornerRadius(13)
.padding()
struct ContentView : View
var body: some View
List
VStack
Text("d")
cView()
ScrollView 是一个真正的 PITA,它讨厌 Text,这就是我用 List 替换它的原因。 RowView 缺少一个 Text 恕我直言,所以我放了一个。 ContentView 中的数组从未使用过,所以我删除了它,同样,navigatinBarTitle 需要一个 NavigationView。
这并不是真正的答案,因为它使用 List 而不是 ScrollView,但它确实指出了您的问题所在。这也很奇怪,因为每件事都在一个列表行中,但我试图尽可能少地改变。
您可能想尝试在您的代码上运行 SwiftLint。我经常对它发誓,尤其是当它抱怨我的枚举开关的圈复杂性时,但它确实改进了我的代码。
【讨论】:
谢谢。我认为这是目前唯一的方法。有没有办法改变列表分隔符的颜色?【参考方案2】:很可能是一个错误,但我不需要封装。如果我不这样做,代码会按预期工作:
struct RowView: View
var body: some View
VStack
HStack
Spacer()
.foregroundColor(Color.black)
Spacer()
.background(Color.white)
.cornerRadius(13)
.padding()
struct ContentView : View
@State var array: [String] = []
@State var height: CGFloat = 60
var body: some View
ScrollView
VStack
Text("d")
.frame(height: 90)
VStack
Button(action:
self.array.append("Test")
, label:
Text("Add")
)
VStack
ForEach(array, id: \.self)_ in
RowView()
.background(Color.red)
.cornerRadius(13)
.padding()
.navigationBarTitle("Test", displayMode: .automatic)
【讨论】:
以上是关于ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView 中的动画不起作用?使用 Xcode 11 测试版 6