I have a List
that\'s displaying two Views
of the same type. When you tap on one of the views, they change their height with an animation.
The solution is just to make height animatable continuously, by providing explicit animatable modifier for this.
Here is working approach. Tested with Xcode 11.4 / iOS 13.4.
Implementation of simple helper modifier
struct AnimatingCellHeight: AnimatableModifier {
var height: CGFloat = 0
var animatableData: CGFloat {
get { height }
set { height = newValue }
}
func body(content: Content) -> some View {
content.frame(height: height)
}
}
Modified using view (other parts unchanged)
struct SubView: View {
@State var change: Bool = false
var body: some View {
Rectangle()
.frame(width: 200)
.modifier(AnimatingCellHeight(height: change ? 300 : 200))
.foregroundColor(Color.red)
.onTapGesture {
withAnimation {
self.change.toggle()
}
}
}
}