在SwiftUI中,使用withAnimation动画关闭视图时,如果视图显示键盘。withAnimation就会出现退出动画向下偏移后消失的情况。
因为键盘收起本身是一个系统动画,withAnimation控制SwiftUI视图动画,实际的显示效果变成:
系统先收起键盘(布局变化) → 视图被迫向下偏移 → 再隐藏视图,看上去就像键盘“卡顿”一样。
Button(action: {
focus = nil // 取消键盘聚集
withAnimation(.easeInOut(duration: 0.3)) { homeVM.isTradeView = false } // 隐藏视图
}, label: {
Text("Closure")
})
解决方案:使用UIView的键盘隐藏动画。
UIView.animate(withDuration: 0.3) {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
withAnimation(.easeInOut(duration: 0.3)) { homeVM.isTradeView = false } // 隐藏视图
UIKit动画控制键盘收起,两个动画时间一致,可以同步隐藏视图和键盘,避免视图下移后隐藏的情况。
