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

Xcode 12中使用UIKit与Charts库图表X轴标签不显示问题求助

解决Charts库X轴城市名称不显示的问题

问题根源分析

你的代码存在几个关键问题导致X轴标签无法正常显示:

  • centerAxisLabelsEnabled = true 开启后未配合调整bar宽度与X轴范围,导致标签被挤出可视区域
  • setLabelCount(_:force:) 传入force:true可能强制系统忽略实际数据量,导致标签被省略
  • 可选类型nombres在闭包中访问存在潜在风险,且X轴范围未与数据点数量匹配

修正后的代码

class BarChartViewController: UIViewController, ChartViewDelegate {
    
    @IBOutlet weak var barChartView: BarChartView!
    var nombres: [String]!
    var precios: [Double]!
  
    override func viewDidLoad() {
        super.viewDidLoad()
        barChartView.delegate = self
        nombres = eventos.devolverNombre()
        print(nombres)
        precios = eventos.devolverPrecios()
        setChart(dataPoints: nombres, values: precios)
    }
    
    func setChart(dataPoints: [String], values: [Double]) {
        barChartView.noDataText = "Es necesario añadir datos."
        var dataEntries: [BarChartDataEntry] = []
        
        for i in 0..<dataPoints.count {
            let dataEntry = BarChartDataEntry(x: Double(i), y: values[i])
            dataEntries.append(dataEntry)
        }
        
        let chartDataSet = BarChartDataSet(entries: dataEntries, label: "PRECIOS POR EVENTO")
        chartDataSet.colors = ChartColorTemplates.colorful()
        
        let chartData = BarChartData(dataSet: chartDataSet)
        chartData.barWidth = 0.6
        barChartView.data = chartData
        
        // 使用专门的索引格式化器处理字符串标签
        barChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: dataPoints)
        barChartView.xAxis.centerAxisLabelsEnabled = false
        // 明确X轴范围,确保覆盖所有数据点
        barChartView.xAxis.axisMinimum = -0.5
        barChartView.xAxis.axisMaximum = Double(dataPoints.count) - 0.5
        // 不强制设置标签数量,让系统适配实际数据
        barChartView.xAxis.setLabelCount(dataPoints.count, force: false)
        
        barChartView.xAxis.labelRotationAngle = 90
        barChartView.xAxis.labelPosition = .bottom
        barChartView.xAxis.labelFont = UIFont.systemFont(ofSize: 10)
        barChartView.animate(xAxisDuration: 1.0, yAxisDuration: 1.0, easingOption: .easeInBounce)
    }
}

关键修改说明

  • 用IndexAxisValueFormatter替代自定义格式化器,它专门适配基于索引的字符串标签,更可靠简洁
  • 关闭centerAxisLabelsEnabled,避免标签位置偏移导致不可见;若需居中显示,需配合调整barWidth为1左右,并设置axisMinimum = 0、axisMaximum = Double(dataPoints.count)
  • 明确X轴的axisMinimum和axisMaximum,确保所有数据点与标签都在可视范围内
  • 移除force:true的标签数量设置,让系统根据实际数据渲染全部标签
  • 删除重复的chartDataSet.colors设置,避免后设置的覆盖前项
  • 移除不必要的dataEntry != nil判断,BarChartDataEntry初始化不会返回nil

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:45:28