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 {