【发布时间】:2019-11-23 11:20:49
【问题描述】:
问题
如何修改滚动视图的滚动目标?我正在寻找一种替代“经典”滚动视图委托方法
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
...我们可以通过targetContentOffset.pointee 修改目标scrollView.contentOffset,例如创建自定义分页行为。
或者换句话说:我确实想在(水平)滚动视图中创建分页效果。
我尝试过的,即。是这样的:
ScrollView(.horizontal, showsIndicators: true, content: {
HStack(alignment: VerticalAlignment.top, spacing: 0, content: {
card(title: "1")
card(title: "2")
card(title: "3")
card(title: "4")
})
})
// 3.
.content.offset(x: self.dragState.isDragging == true ? self.originalOffset : self.modifiedOffset, y: 0)
// 4.
.animation(self.dragState.isDragging == true ? nil : Animation.spring())
// 5.
.gesture(horizontalDragGest)
尝试
这是我尝试过的(除了自定义 scrollView 方法):
scrollView 具有比屏幕空间更大的内容区域,以便完全启用滚动。
我创建了一个
DragGesture()来检测是否存在拖拽。在 .onChanged 和 .onEnded 闭包中,我修改了我的@State值以创建所需的滚动目标。-
有条件地将原始未更改的值和新修改的值输入到 .content.offset(x: y:) 修饰符中 - 取决于作为缺少 scrollDelegate 方法的替代品的 dragState。
李> 添加了仅在拖动结束时有条件地执行的动画。
将手势附加到滚动视图。
长话短说。它不起作用。 我希望我明白我的问题是什么。
有什么解决方案吗?期待任何输入。谢谢!
【问题讨论】:
标签: scrollview swiftui ios13