SwiftUI:点击特定视图时移除NavigationLink的动画
要实现点击收藏按钮不触发NavigationLink的透明度动画,同时保留其他区域的动画效果,只需要给收藏按钮设置更高优先级的点击手势,让按钮的点击事件优先被处理,阻止NavigationLink响应这个点击。
修改后的代码:
1. 更新FavoriteButton代码
Button(action: { isFavorite.toggle() }) { Image(systemName: isFavorite ? "star.fill" : "star") } .highPriorityGesture(TapGesture()) // 关键:让按钮手势优先级高于NavigationLink
2. 其他代码保持不变
BookRow和ScrollView的代码不需要改动,只需要给FavoriteButton加上上述的.highPriorityGesture(TapGesture())即可。
原理说明
NavigationLink的label默认会响应整个区域的点击事件并播放动画,通过给收藏按钮添加高优先级的点击手势,当点击按钮时,手势会被按钮优先捕获,NavigationLink不会接收到这个点击信号,自然就不会触发透明度动画。而点击BookRow的其他区域时,NavigationLink的点击事件正常触发,动画也能正常生效。
内容的提问来源于stack exchange,提问作者ST K
相关产品推荐
相关产品推荐

