fix: tab bar collapses during auto-scroll
tabBarMinimizeBehavior needs scrollViewWillBeginDragging to recognize a scroll session. Now ScrollViewDriver calls it on the original delegate when auto-scroll starts, and scrollViewDidEndDragging + scrollViewDidEndDecelerating when it stops. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -78,11 +78,13 @@ struct ScrollViewDriver: UIViewRepresentable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func startScrolling(in view: UIView) {
|
func startScrolling(in view: UIView) {
|
||||||
// Re-find scroll view if needed
|
|
||||||
if scrollView == nil {
|
if scrollView == nil {
|
||||||
findScrollView(from: view)
|
findScrollView(from: view)
|
||||||
}
|
}
|
||||||
guard scrollView != nil else { return }
|
guard let sv = scrollView else { return }
|
||||||
|
|
||||||
|
// Signal scroll start — triggers tab bar minimize
|
||||||
|
originalDelegate?.scrollViewWillBeginDragging?(sv)
|
||||||
|
|
||||||
let link = CADisplayLink(target: self, selector: #selector(tick))
|
let link = CADisplayLink(target: self, selector: #selector(tick))
|
||||||
link.preferredFrameRateRange = CAFrameRateRange(minimum: 30, maximum: 60)
|
link.preferredFrameRateRange = CAFrameRateRange(minimum: 30, maximum: 60)
|
||||||
@@ -93,6 +95,12 @@ struct ScrollViewDriver: UIViewRepresentable {
|
|||||||
func stopScrolling() {
|
func stopScrolling() {
|
||||||
displayLink?.invalidate()
|
displayLink?.invalidate()
|
||||||
displayLink = nil
|
displayLink = nil
|
||||||
|
|
||||||
|
// Signal scroll end — lets tab bar reappear
|
||||||
|
if let sv = scrollView {
|
||||||
|
originalDelegate?.scrollViewDidEndDragging?(sv, willDecelerate: false)
|
||||||
|
originalDelegate?.scrollViewDidEndDecelerating?(sv)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func tick(_ link: CADisplayLink) {
|
@objc private func tick(_ link: CADisplayLink) {
|
||||||
|
|||||||
Reference in New Issue
Block a user