Swift iOS:Bar chart实现滚动时X轴标签与柱状图不对齐问题求解
问题修复方案
这个对齐异常是X轴标签对齐规则、可视区间设置、标签计数逻辑三者不匹配导致的,按以下步骤调整代码即可解决:
第一步:修正X轴基础对齐配置
先确保X轴标签默认对齐到柱子中心,这是对齐的基础:
// 固定X轴标签位置为底部 barChartView.xAxis.labelPosition = .bottom // 开启标签居中对齐到坐标轴刻度点,每个柱子的中心刚好对应整数刻度 barChartView.centerAxisLabelsEnabled = true // 关闭X轴自动刻度计算,完全由自己控制 barChartView.xAxis.granularity = 1.0 barChartView.xAxis.granularityEnabled = true
第二步:调整可视区间与缩放逻辑
你之前的axisMaximum设置是对的,但可视区间最大宽度的计算多了1个刻度位,修正后代码:
barChartView.xAxis.axisMinimum = 0.0 barChartView.xAxis.axisMaximum = Double(labels.count - 1) // 一屏展示一半数量的柱子,可视区间宽度=展示的柱子数-1 let visibleCount = Double(labels.count) / 2 barChartView.setVisibleXRangeMaximum(visibleCount - 1) // 不要用zoom方法直接固定缩放比,避免动态标签数量变化时偏移 barChartView.moveViewToX(0.0) // 开启横向拖动,禁止用户手动调整缩放比例避免错位 barChartView.isDragEnabled = true barChartView.scaleXEnabled = false barChartView.scaleYEnabled = false
第三步:修正标签计数设置
不要开启force: true参数,强制固定标签数量会导致库自动调整标签位置,和柱子刻度错位:
// 标签数量和一屏展示的柱子数保持一致,force参数设为false barChartView.xAxis.setLabelCount(Int(ceil(visibleCount)), force: false)
动态维度适配
如果是日/月维度动态切换标签,切换维度时重新执行以上三步配置,再调用barChartView.notifyDataSetChanged()刷新图表即可。
内容的提问来源于stack exchange,提问作者Vinay Podili
相关产品推荐
相关产品推荐

