ios SwiftUI:拖动底部工作表的ScrollView

dsf9zpds  于 2023-05-23  发布在  iOS
关注(0)|答案(5)|浏览(269)

我正在尝试创建一个SwiftUI Scrollview,它可以像这样拖动它的容器:https://drive.google.com/file/d/1O92DgsVI1OjM1HEUXUwVywB8gcdShOP-/view?usp=sharing
许多苹果应用程序使用这个(苹果Map,音乐,钱包等),但我还没有找到一个简单的方法来做到这一点与SwiftUI。你认为简单地实现这一点的最佳方法是什么?
我已经看过了这里的大多数库https://github.com/search?q=swiftui+drawer,但是没有一个实现了抽屉,里面有一个可以拖动视图的ScrollView。
我还尝试将自定义UIScrollView实现为UIViewRepresentable,并尝试调整scrollViewWillBeginDraging(),但无法使其工作。

vwoqyblh

vwoqyblh1#

以下用于在整个应用程序中应用

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

ryevplcw2#

检查SheeKit库,其中支持原生工作表的行为。
您可以在medium上阅读有关in this story的实现。此外,你可以在故事的结尾找到演示视频。
如果你需要一个高级的原生SwiftUI滚动视图,支持内容偏移跟踪和其他类似于UIKit的可配置性,请检查SolidScroll库及其背后的story

wi3ka0sx

wi3ka0sx3#

我遇到了同样的问题,遇到了FloatingPanel包。repo包含一个example,用于将其应用于SwiftUI应用程序。

5cg8jx4n

5cg8jx4n4#

好吧,我在自己开发drawer package时遇到了这个问题,我相信我能够使用遗留的UIscrollViewUIViewRepresentable Package 器解决这个问题。
如果你想使用你之前已经拥有的包,这里是我最终做的:
在我的抽屉里,我添加了这个LegacyScrollView Package 器。

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
    }

使用这个 Package 器,我能够访问UIScrollView的gestureRecognizerShouldBegin(_:),并通过SwiftUI修饰符覆盖它
Result

mnemlml8

mnemlml85#

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

相关问题