SwiftUI - fade out a ScrollView

前端 未结 1 1670
闹比i
闹比i 2021-01-26 19:00

I have a generated, oversized chart, which I put into a ScrollView so that the user can scroll to the right and see all values. I would like to indicate to the user that there\'

相关标签:
1条回答
  • 2021-01-26 19:46

    Ok, it is known SwiftUI issue that it does not pass some gestures via overlays even transparent.

    Here is possible approach to solve this - the idea is to have gradient to cover only small edge location, so other part of scroll view be accessed directly (yes, under gradient it will be still not draggable, but it is small part).

    Demo prepared & tested with Xcode 11.7 / iOS 13.7

    (simplified variant of your view)

    struct HealthExportPreview: View {
        var body: some View {
            GeometryReader { gp in
                ZStack {
                    ScrollView(.horizontal) {
                        HStack {
                           // simplified content
                            ForEach(0..<20, id: \.self) { index in
                                Rectangle().fill(Color.red)
                                    .frame(width: 40, height: 80)
                            }
                        }
                        .padding()
                        .animation(.interactiveSpring())
                    }
    
                    // inject gradient at right side only
                    Rectangle()
                        .fill(
                            LinearGradient(gradient: Gradient(stops: [
                                .init(color: Color(UIColor.systemBackground).opacity(0.01), location: 0),
                                .init(color: Color(UIColor.systemBackground), location: 1)
                            ]), startPoint: .leading, endPoint: .trailing)
                        ).frame(width: 0.2 * gp.size.width)
                        .frame(maxWidth: .infinity, alignment: .trailing)
                }.fixedSize(horizontal: false, vertical: true)
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题