gpt4 book ai didi

macos - 将SwiftUI列表滚动到新选择

转载 作者:行者123 更新时间:2023-12-03 23:58:18 26 4
gpt4 key购买 nike

如果您有一个SwiftUI列表,该列表允许单选,则可以通过单击列表(大概使它成为按键响应者),然后使用箭头键来更改选择。如果该选择到达可见区域的末尾,它将滚动整个列表以保持选择可见。

但是,如果以其他方式(例如,使用按钮)更新了选择对象,则列表不会滚动。

以编程方式设置时,是否有任何方法可以强制列表滚动到新选择?

示例应用程序:

import SwiftUI

struct ContentView: View {
@State var selection: Int? = 0

func changeSelection(_ by: Int) {
switch self.selection {
case .none:
self.selection = 0
case .some(let sel):
self.selection = max(min(sel + by, 20), 0)
}
}

var body: some View {
HStack {
List((0...20), selection: $selection) {
Text(String($0))
}
VStack {
Button(action: { self.changeSelection(-1) }) {
Text("Move Up")
}
Button(action: { self.changeSelection(1) }) {
Text("Move Down")
}
}
}
}
}

最佳答案

在针对iO 14和MacOs Big Sur的SwiftUI的新版本中,他们添加了使用新的ScrollViewReader以编程方式滚动到特定单元格的功能:

struct ContentView: View {
let colors: [Color] = [.red, .green, .blue]

var body: some View {
ScrollView {
ScrollViewReader { value in
Button("Jump to #8") {
value.scrollTo(8)
}

ForEach(0..<10) { i in
Text("Example \(i)")
.frame(width: 300, height: 300)
.background(colors[i % colors.count])
.id(i)
}
}
}
}
}

然后可以像这样使用方法 .scrollTo()
value.scrollTo(8, anchor: .top)

信用: www.hackingwithswift.com

关于macos - 将SwiftUI列表滚动到新选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57121782/

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