From 83b067050316e34eda9f7abf9394de436d4f1f02 Mon Sep 17 00:00:00 2001 From: Doug <6060466+pixlwave@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:00:05 +0100 Subject: [PATCH] Fix a regression where you can't scroll the timeline on iOS 17 (#3320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was caused by a fix for the same bug on iOS 18 🤦‍♂️ --- .../Screens/RoomScreen/View/SwipeRightAction.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ElementX/Sources/Screens/RoomScreen/View/SwipeRightAction.swift b/ElementX/Sources/Screens/RoomScreen/View/SwipeRightAction.swift index ad5ce5806..183af7a4c 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/SwipeRightAction.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/SwipeRightAction.swift @@ -31,7 +31,7 @@ struct SwipeRightAction: ViewModifier { content .offset(x: xOffset, y: 0.0) .animation(.interactiveSpring().speed(0.5), value: xOffset) - .simultaneousGesture(gesture) + .timelineGesture(gesture) .onChange(of: dragGestureActive) { value in if value == true { if shouldStartAction() { @@ -113,6 +113,18 @@ extension View { action: @escaping () -> Void) -> some View { modifier(SwipeRightAction(label: label, shouldStartAction: shouldStartAction, action: action)) } + + @ViewBuilder + fileprivate func timelineGesture(_ gesture: some Gesture) -> some View { + if #available(iOS 18.0, *) { + // iOS 18 has a bug https://forums.developer.apple.com/forums/thread/760035 and you + // can't scroll the timeline when `gesture` is used. + simultaneousGesture(gesture) + } else { + // Equally on iOS 17 you can't scroll the timeline when `simultaneousGesture` is used. + self.gesture(gesture) + } + } } struct SwipeRightAction_Previews: PreviewProvider, TestablePreview {