禁用在swiftUI滚动视图中从下至上滚动



在我的iOS应用程序(使用SwiftUI(中,我使用的是垂直滚动的滚动视图。我的问题是:我只想从上到下滚动,而不是从下到上滚动。

这可能吗?

谢谢。

使用LazyVGrid和拖动手势更改后,只允许滚动到底部。

struct ContentView: View {
@State private var offset: CGFloat = .zero

var columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
var body: some View {
LazyVGrid(columns: columns) {
ForEach((0...79), id: .self) {
let codepoint = $0 + 0x1f600
let codepointString = String(format: "%02X", codepoint)
Text("(codepointString)")
let emoji = String(Character(UnicodeScalar(codepoint)!))
Text("(emoji)")
}
}
.font(.largeTitle)
.offset(y: offset)
.gesture(DragGesture().onChanged {value in
let translation = value.translation.height
if translation < 1 {
offset = translation
}
})
}
}

更新

滚动时需要跟踪最后一个偏移,每次停止滚动时将其重置为零。这修复了您在评论中提到的问题。

struct ContentView: View {
@State private var offset: CGFloat = .zero
@State private var lastOffset: CGFloat = .zero

var columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
var body: some View {
LazyVGrid(columns: columns) {
ForEach((0...79), id: .self) {
let codepoint = $0 + 0x1f600
let codepointString = String(format: "%02X", codepoint)
Text("(codepointString)")
let emoji = String(Character(UnicodeScalar(codepoint)!))
Text("(emoji)")
}
}
.font(.largeTitle)
.offset(y: offset)
.gesture(DragGesture().onChanged {value in
let translation = value.translation.height
if  translation <= lastOffset {
offset = translation
lastOffset = translation
}
}.onEnded { value in
lastOffset = .zero
})
}
}

如果视图不太多,则不需要使用LazyVGrid

最新更新