// source: https://stackoverflow.com/a/65002837 import SwiftUI // we need this workaround only for macOS // this is the NSView that implements proper `wantsForwardedScrollEvents` method final class VerticalScrollingFixHostingView: NSHostingView where Content: View { override func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Bool { axis == .vertical } } // this is the SwiftUI wrapper for our NSView struct VerticalScrollingFixViewRepresentable: NSViewRepresentable where Content: View { let content: Content func makeNSView(context _: Context) -> NSHostingView { VerticalScrollingFixHostingView(rootView: content) } func updateNSView(_: NSHostingView, context _: Context) {} } // this is the SwiftUI wrapper that makes it easy to insert the view // into the existing SwiftUI view builders structure struct VerticalScrollingFixWrapper: View where Content: View { let content: () -> Content init(@ViewBuilder content: @escaping () -> Content) { self.content = content } var body: some View { VerticalScrollingFixViewRepresentable(content: self.content()) } } extension View { @ViewBuilder func workaroundForVerticalScrollingBug() -> some View { VerticalScrollingFixWrapper { self } } }