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

如何设置macOS SwiftUI Table列宽调整行为,不影响其他列?

表格列宽调整示意图

注意:本问题仅针对macOS,不涉及iOS

我在macOS上有一个包含30列的大型Table,支持垂直和水平滚动。

当用户拖动调整SwiftUI的Table中某一列的宽度时,框架会先尽可能缩小其他列,再调整整个表格的宽度。(如上图所示,扩展“Label”列会挤压其他列。)

如何设置Table使其保留所有列宽,当调整某一列宽度时仅按需改变整个表格的宽度?

致Sweeper

以下是复现该行为的Table代码,你需要自行替换KeyPaths。注意代码中使用了Group(以支持超过10列,尽管此处仅展示9列)和TableStyle修饰符。

var body: some View
{
    Table(cues, sortOrder: $sortOrder)
    {
        Group
        {
            TableColumn("", value: \SheetCue.associatedMasterCue!.notesCount) { cue in
                Text("Blah")
            }
            .width(min: 18, max: 18)
            
            TableColumn("Title", value: \SheetCue.associatedMasterCue!.title) { cue in
                Text("Blah")
            }
            .width(min: 80, ideal: 250, max: 2000)
            
            TableColumn("Artist", value: \SheetCue.associatedMasterCue!.artist) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 200, max: 2000)

            TableColumn("Album", value: \SheetCue.associatedMasterCue!.album) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 160, max: 2000)
            
            TableColumn("Composer/Writer", value: \SheetCue.associatedMasterCue!.composer) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 160, max: 2000)
        }
        
        Group
        {
            TableColumn("Label", value: \SheetCue.associatedMasterCue!.label) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 160, max: 2000)
            
            TableColumn("Publisher", value: \SheetCue.associatedMasterCue!.publisher) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 160, max: 2000)
            
            TableColumn("Contact", value: \SheetCue.associatedMasterCue!.contactInfo) { cue in
                Text("Blah")
            }
            .width(min: 40, ideal: 160, max: 2000)
            
            TableColumn("Uses", value: \SheetCue.numberOfUses) { cue in
                Text(String(cue.numberOfUses.formatted()))
            }
            .width(min: 30, ideal: 40, max: 80)
        }
    }
    .onChange(of: sortOrder) { _, sortOrder in
        cues.sort(using: sortOrder)
    }
    .tableStyle(.bordered)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:22:40