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

SwiftUI中被NavigationLink包裹的List子项无法读取父级editMode环境变量

解决方案

根因说明

NavigationLink会创建独立的环境上下文,默认不会继承父视图层级的editMode环境变量,因此包裹后的子视图无法读取到全局编辑状态。

可行实现方案

不需要自定义编辑状态变量,仅需在父视图中读取系统原生editMode环境值,手动注入给NavigationLink包裹的子内容即可,完全保留原生编辑切换的平滑动画。

修改后完整代码

import SwiftUI

struct DummyListView: View {
    var items = ["item 1", "item 2", "item 3"]
    // 读取系统原生的editMode环境变量
    @Environment(\.editMode) private var editMode

    var body: some View {
        NavigationView {
            List {
                Section(header: Text("Basic Rows")){
                    ForEach(items, id: \.self){ item in
                        ItemRow(itemName: item)
                    }
                    .onDelete { index in
                        // delete functionality
                    }
                }
                
                Section(header: Text("Wrapped in Navigation link")){
                    ForEach(items, id: \.self){ item in
                        NavigationLink(destination: Text("Hello")){
                            ItemRow(itemName: item)
                                // 手动注入父层的editMode到子视图环境
                                .environment(\.editMode, editMode)
                        }
                    }
                    .onDelete { index in
                        // delete functionality
                    }
                }
            }
            .listStyle(InsetGroupedListStyle())
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    EditButton()
                }
            }
        }
        
    }
    
    struct ItemRow: View {
        @Environment(\.editMode) var editMode
        let itemName: String
        
        var body: some View {
            HStack {
                Text(itemName)
                
                Spacer()
                
                Text(editMode?.wrappedValue == .active ? "Active" : "Inactive")
            }
        }
    }
}

效果验证

修改后两类行都会同步响应编辑状态切换,原生编辑动画完全保留,无额外自定义逻辑侵入。

内容的提问来源于stack exchange,提问作者Nik Payne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:09:01