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()
}
}