Can't resize view with matchedGeometryEffect

Viewed 16

I'm having problems with resizing the same view when applying to it .matchedGeometryEffect. As expected first you apply .matchedGeometryEffect and after it a .frame() view modifier and it has no effect whatsoever. I'm using iOS 16 and Xcode 14. How to overcome this?

Here's code:

import SwiftUI

struct ContentView: View {
    let colors: [Color] = [.red, .purple, .yellow, .green, .blue, .mint, .orange]
    @State private var colums = Array(repeating: GridItem(), count: 2)
    @State private var showNewView = false
    @State private var viewNumber = 0
    @Namespace private var colorNamespace
    
    var body: some View {
        ScrollView {
            LazyVGrid(columns: colums) {
                ForEach(1..<101) { number in
                    colors[number % colors.count]
                        .matchedGeometryEffect(id: number, in: colorNamespace)
                        .frame(height: 200)
                        .overlay(Text("\(number)").font(.title2.bold()).foregroundColor(.white))
                        .onTapGesture {
                            withAnimation(.spring()) {
                                viewNumber = number
                                showNewView.toggle()
                            }
                        }
                }
            }
        }
        .opacity(showNewView ? 0 : 1)
        
        if showNewView {
            colors[viewNumber % colors.count]
                .matchedGeometryEffect(id: viewNumber, in: colorNamespace, anchor: .center)
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .overlay(Text("\(viewNumber)").font(.title2.bold()).foregroundColor(.white))
                .onTapGesture(count: 2) {
                    withAnimation(.spring()) {
                        showNewView = false
                    }
                }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
0 Answers
Related