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

如何设置SwiftUI嵌套DisclosureGroup的内层为不可展开状态

实现方案

方案1:基于原生DisclosureGroup实现不可展开(保留原有样式)

原生即可实现该需求,不需要引入第三方组件,修改内层DisclosureGroup的配置即可:

  • 固定为持续展开状态传.constant(true),固定为持续收起状态传.constant(false)
  • 不需要保留Header自定义交互的场景下,追加.allowsHitTesting(false)完全阻断点击交互,即可彻底移除展开能力

修改后的内层代码示例:

// Make non expanable
DisclosureGroup(isExpanded: .constant(true)) {
    ForEach(Array(tasks.enumerated()), id:\.1.title) { (index, check) in
        // Content
    }
} label: {
    // Header
}
.allowsHitTesting(false)

如果你的内层Header需要响应自定义点击事件,不要使用allowsHitTesting(false),改用自定义空setter的Binding即可,不会影响Header本身的交互响应:

DisclosureGroup(isExpanded: Binding<Bool>(
    get: { true },
    set: { _ in }
)) {
    // 内容
} label: {
    // 支持自定义点击的Header
}

方案2:更轻量的替代方案(无展开箭头样式)

如果你不需要DisclosureGroup自带的折叠箭头、默认嵌套缩进样式,完全没必要使用DisclosureGroup组件,直接用VStack组合Header和内容即可,性能开销更低:

VStack(alignment: .leading, spacing: 8) {
    // 原Header内容
    ForEach(Array(tasks.enumerated()), id:\.1.title) { (index, check) in
        // Content
    }
}
.padding(.leading, 16) // 按需调整缩进匹配外层DisclosureGroup的嵌套效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:00:02