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

如何让SwiftUI中的一维条形图占满整个宽度?

问题描述

我的图表右侧存在一处突兀的空白间隙,希望让条形图占满整个宽度以消除空白区域。我尝试调整width参数但未能解决,不确定是否可行,恳请解答。

条形图右侧空白

相关代码:

struct ViewStatus {
    var views: Double
    var status: String
}

struct ViewsChartView: View {
    let data: [ViewStatus]

    var body: some View {
        
        Chart(data, id: \.status) {
            
            BarMark(
                x: .value("Views", $0.views)
            )
            .foregroundStyle(by: .value("Status", $0.status))
            
        }
    }
}
解决方案

SwiftUI的Chart默认会给坐标轴预留边距,要消除右侧空白,可通过以下方式处理:

  • 自定义X轴范围:计算数据中的最大views值,手动指定X轴的范围从0到这个最大值,让图表的X轴刚好覆盖数据区间,无额外留白。修改后的代码:

    struct ViewsChartView: View {
        let data: [ViewStatus]
        
        private var maxViews: Double {
            data.map(\.views).max() ?? 0
        }
    
        var body: some View {
            
            Chart(data, id: \.status) {
                BarMark(
                    x: .value("Views", $0.views)
                )
                .foregroundStyle(by: .value("Status", $0.status))
            }
            .chartXScale(domain: 0...maxViews)
        }
    }
    
  • 移除X轴边距:如果仍有空白,可通过chartXAxis调整轴的内边距,彻底消除多余间隙:

    .chartXAxis {
        AxisMarks(position: .bottom) { value in
            AxisGridLine()
            AxisTick()
            AxisValueLabel()
        }
        .axisInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
    }
    

核心原因是Chart默认会给轴添加 padding 防止内容溢出,手动指定domain能强制轴范围贴合数据,从而消除右侧空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:58:28