SwiftUI:滚动视图,拖动底部表单



我试图创建一个SwiftUI Scrollview拖动它的容器像这样:https://drive.google.com/file/d/1O92DgsVI1OjM1HEUXUwVywB8gcdShOP-/view?usp=sharing

许多苹果应用程序都使用这个功能(苹果地图、音乐、钱包等),但我还没有找到一个简单的方法来使用SwiftUI。你认为简单实现这一点的最好方法是什么?我看过这里的大多数库https://github.com/search?q=swiftui+drawer但没有一个实现了可以拖动视图的ScrollView的抽屉

我也尝试实现一个自定义的UIScrollView作为uiviewrepresable,我试图调整scrollviewwillbegindrag(),但我不能使它工作。

好吧,我在自己开发抽屉包时遇到了这个问题,我相信我能够使用传统的UIscrollViewUIViewRepresentable包装器来解决它。

如果你想使用你之前已经有了的包,下面是我最后做的:

在我的抽屉里,我添加了这个LegacyScrollView包装器。

LegacyScrollView(.vertical, showsIndicators: showsIndicators) {
content
}
.onDragShouldBegin { pan, scrollView in
/// touch shouldn't begin when scrolling past zero content offset
scrollView.contentOffset.y - pan.translation(in: scrollView).y > 0
}

有了这个包装器,我可以访问UIScrollView的gestureRecognizerShouldBegin(_:)并通过SwiftUI修饰符覆盖它

结果

以下内容用于应用于整个应用程序

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UIScrollView.appearance().bounces = false
}

我遇到了同样的问题,并遇到了FloatingPanel包。这个repo包含了一个应用到SwiftUI应用的例子。

查看本地表单支持该行为的SheeKit库。

您可以在medium上阅读这个故事中的实现。此外,你可以在故事的最后找到演示视频。

如果你需要一个高级的原生SwiftUI滚动视图,支持内容偏移跟踪和其他类似uikit的可配置性,请检查SolidScroll库及其背后的故事。

struct ContentView: View {
init() {
UIScrollView.appearance().bounces = false
}
var body: some View {
ZStack {
DraggableView()
ScrollView {
LazyVStack {
Text("Hello World")
}
}
}
}
}