当玻璃元素作为导航过渡的起点时,会出现奇怪的动画
我注意到,每当一个玻璃元素(既可以作为独立的玻璃元素,也可以是 tabViewBottomAccessory)成为导航过渡的 matchedTransitionSource 时,在动画反向(例如再次关闭时)会出现一个奇怪的动画小故障。相应的玻璃元素会一直保持高亮,直到它迅速回到其 自然状态。
我在想这是否是预期行为,以及我是否可以防止它。我也见过其他应用没有这个问题,比如Apple Podcasts。
我还会附上一段演示该问题的GIF,以及一个最小可复现的示例。

struct ContentView: View {
@Namespace private var namespace
@State private var present = false
var body: some View {
TabView {
Color.red.ignoresSafeArea()
}
.sheet(isPresented: $present) {
Text("")
.navigationTransition(.zoom(sourceID: "source", in: namespace))
}
.tabViewBottomAccessory {
HStack {
Image(systemName: "play.fill")
Text("Start Session")
Spacer(minLength: 0)
}
.padding()
.contentShape(.rect)
.matchedTransitionSource(id: "source", in: namespace)
.onTapGesture {
present = true
}
}
}
}
解决方案
截至 iOS 27 Developer Beta 1,苹果已经解决了这个动画小故障。因为修复已经内置在操作系统本身,所以与现有二进制向后兼容。你无需使用最新版SDK重新构建,即可看到流畅的过渡效果。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。