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
相关产品推荐
相关产品推荐

