You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 26 RC:缩放导航过渡滑动返回后视图消失问题

iOS 16 RC中SwiftUI缩放导航过渡滑动返回后Push按钮消失的解决方案

这个问题是iOS 16 RC版本中SwiftUI导航过渡的已知bug,当matchedTransitionSource与navigationTransition(.zoom)结合使用,且源视图位于ScrollView内部时,滑动返回的交互会导致源视图(Push按钮)的动画状态异常,从而被隐藏。

以下是几个可行的解决办法:

方法1:将源按钮移出ScrollView

把Push按钮从ScrollView中移出,避免滚动容器与过渡动画的状态冲突:

import SwiftUI

struct ContentView: View {
    @State private var paths = [String]()
    @Namespace var ns
    
    var body: some View {
        NavigationStack(path: $paths) {
            VStack {
                Button("Push") {
                    paths.append("a")
                }
                .matchedTransitionSource(id: "a", in: ns)
                
                ScrollView {
                    // 原ScrollView内的其他内容
                }
            }
            .navigationDestination(for: String.self, destination: { id in
                Text(id)
                    .navigationTransition(.zoom(sourceID: "a", in: ns))
            })
        }
    }
}

#Preview {
    ContentView()
}

方法2:强制刷新源视图状态

通过监听路径的变化,手动触发源视图的刷新,确保滑动返回后按钮恢复可见:

import SwiftUI

struct ContentView: View {
    @State private var paths = [String]()
    @Namespace var ns
    @State private var refreshTrigger = UUID() // 用于强制刷新
    
    var body: some View {
        NavigationStack(path: $paths) {
            ScrollView {
                Button("Push") {
                    paths.append("a")
                }
                .matchedTransitionSource(id: "a", in: ns)
                .id(refreshTrigger) // 绑定ID实现视图刷新
            }
            .navigationDestination(for: String.self, destination: { id in
                Text(id)
                    .navigationTransition(.zoom(sourceID: "a", in: ns))
            })
            .onChange(of: paths) { newValue in
                // 当路径清空(返回主页面)时,触发刷新
                if newValue.isEmpty {
                    refreshTrigger = UUID()
                }
            }
        }
    }
}

#Preview {
    ContentView()
}

方法3:升级到iOS 16正式版

iOS 16 RC版本存在不少过渡动画相关的bug,苹果在正式版中修复了大量此类问题,升级到正式版后该问题大概率会自动解决。

内容的提问来源于stack exchange,提问作者Kai Shao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:12:43