gpt4 book ai didi

SwiftUI - 随着列表滚动的进行,使列表下方的内容可滚动

转载 作者:行者123 更新时间:2023-12-04 07:15:52 24 4
gpt4 key购买 nike

我有一个列表,其中包含许多元素和列表下方的两个按钮。我想要实现的是在用户滚动到(几乎)列表末尾后显示按钮。这是我的代码:

import SwiftUI

struct ContentView: View {
var body: some View {
let numbers = [1, 3, 2, 6, 7, 4, 43, 42, 4, 7, 3, 7, 3, 2, 1, 4, 765, 423, 5345, 5345, 345, 4, 8, 21]

List {
ForEach(numbers, id: \.self) { number in
Text(number.description)
}
}
ButtonsStack()

}
}

struct ButtonsStack: View {
var body: some View {
VStack {
Button(action: {}, label: {
Text("Button")
.foregroundColor(.blue)
})
Button(action: {}, label: {
Text("Button2")
.foregroundColor(.blue)
})
}
}
}
这导致按钮固定在底部(一直显示):
fixedButtons
如果我移动 ButtonsStack()List ,而不是按钮将作为列表的一行放置,这也不是我想要的:
buttonsInsideAList
所以我想要的是第一张图片上的按钮,但是当用户滚动到列表底部时首先显示。我怎样才能实现它?我尝试将所有内容都放在 ScrollView 中,但没有用。

最佳答案

您必须检查用户是否已将列表滚动到最后,并将按钮的外观设置为该条件。
最简单的方法是检查最后一行何时出现在屏幕上( onAppear ):

struct ContentView: View {
@State private var thisIsTheEnd = false
var body: some View {
let numbers = [1, 3, 2, 6, 7, 4, 43, 42, 4, 7, 3, 7, 3, 2, 1, 4, 765, 423, 5345, 5345, 345, 4, 8, 21]

VStack {
List {
ForEach(numbers.indices, id: \.self) { index in
if index == numbers.count - 1 {
Text(numbers[index].description)
.onAppear {
thisIsTheEnd = true
}
} else {
Text(numbers[index].description)
}
}
}
if thisIsTheEnd {
ButtonsStack()
}
}
}
}

关于SwiftUI - 随着列表滚动的进行,使列表下方的内容可滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68771054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com