Swift调用Objective-C实现Core Plot柱状图无法固定柱宽如何解决
解决方案
你遇到的柱状条首尾宽度不一致是Core Plot柱状图的常见问题,核心原因是X轴默认范围没有给首尾柱子预留足够的绘制空间,且没有显式固定柱宽,导致首尾柱子被边缘挤压显示不全。你可以按以下步骤修改:
1. 显式固定柱宽
你使用的封装LCPlot类、以及原生Core Plot的CPTBarPlot都支持直接设置固定柱宽,在添加plot的代码段加入柱宽配置即可:
let plot1 = LCPlot() plot1.data = randomData(for: 3) plot1.fillColor = UIColor(red: 0.98, green: 0.59, blue: 0.07, alpha: 1.00) // 新增:设置固定柱宽,数值为X轴坐标单位下的宽度,0.8代表每个柱子占0.8个X轴单位,剩下0.2为间隙 plot1.barWidth = 0.8 a.add(plot1)
如果你的LCPlot没有暴露barWidth属性,找到内部封装的CPTBarPlot实例,设置barPlot.barWidth = NSNumber(floatLiteral: 0.8)即可。
2. 调整X轴范围预留边距
你当前X轴标签索引是0~11共12个刻度,需要把X轴的全局范围设置为-0.5 ~ 11.5,给首尾柱子各留半个柱宽的绘制空间,避免被边缘裁切:
如果是原生Core Plot,配置绘图空间的代码如下:
let plotSpace = a.graph.defaultPlotSpace as! CPTXYPlotSpace plotSpace.xRange = CPTPlotRange(location: NSNumber(value: -0.5), length: NSNumber(value: 12))
如果你用的LCChart封装有X范围接口,直接设置对应参数即可,也可以通过增加X轴左右边距实现同样效果,不要把全局padding设为0后完全不留边:
// 把原来的a.padding = 0 改为区分边距设置,给X轴左右预留边距 a.padding = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
按以上两步修改后所有柱状条的宽度就会完全一致。
内容的提问来源于stack exchange,提问作者OhStack
相关产品推荐
相关产品推荐

