当玻璃元素作为导航过渡的起点时,会出现奇怪的动画

移动开发 2026-07-09

我注意到,每当一个玻璃元素(既可以作为独立的玻璃元素,也可以是 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章