Search code examples
listswiftuigestureshadow

SwiftUI .shadow blocks List scroll gesture for all but first List {}. Why?


if I place 2 or more Lists with items in VStack or HStack and give the Vstack .shadow attribute, only the first List is scrollable and receives "gesture" events. Anybody has an idea why and is this intended behaviour? Seems like a bug to me. Tried on Xcode and device with iOS 14 and 14.+

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            ListView1()
            ListView2()
        }
        .shadow(radius: 5)
    }
}

struct ListView1:View {
    var values=["1","2","3"]
    var body: some View {
        List {
            ForEach(values, id: \.self) { (value) in
                Text("Value \(value)")
            }
        }
    }
}

struct ListView2:View {
    var values=["5","6","7"]
    var body: some View {
        List {
            ForEach(values, id: \.self) { (value) in
                Text("Value \(value)")
            }
        }
    }
}

Solution

  • Use compositingGroup() for solving issue!


    import SwiftUI
    
    struct ContentView: View {
        var body: some View {
            VStack {
                ListView1()
                ListView2()
            }
            .compositingGroup()   //  <<: Here!
            .shadow(radius: 5)
        }
    }