40 lines
1.1 KiB
Swift
40 lines
1.1 KiB
Swift
//
|
|
// Swiftfin is subject to the terms of the Mozilla Public
|
|
// License, v2.0. If a copy of the MPL was not distributed with this
|
|
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Copyright (c) 2022 Jellyfin & Jellyfin Contributors
|
|
//
|
|
|
|
import Introspect
|
|
import SwiftUI
|
|
|
|
struct ScrollViewOffsetModifier: ViewModifier {
|
|
|
|
@Binding
|
|
var scrollViewOffset: CGFloat
|
|
|
|
private let scrollViewDelegate: ScrollViewDelegate?
|
|
|
|
init(scrollViewOffset: Binding<CGFloat>) {
|
|
self._scrollViewOffset = scrollViewOffset
|
|
self.scrollViewDelegate = ScrollViewDelegate()
|
|
self.scrollViewDelegate?.parent = self
|
|
}
|
|
|
|
func body(content: Content) -> some View {
|
|
content.introspectScrollView { scrollView in
|
|
scrollView.delegate = scrollViewDelegate
|
|
}
|
|
}
|
|
|
|
private class ScrollViewDelegate: NSObject, UIScrollViewDelegate {
|
|
|
|
var parent: ScrollViewOffsetModifier?
|
|
|
|
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
|
parent?.scrollViewOffset = scrollView.contentOffset.y
|
|
}
|
|
}
|
|
}
|