我有一个名称与年龄的图表,其中名称在x轴上,值在Y轴上。 问题是名称在x轴上重叠,看起来不太好。
我找不到任何格式用于在x轴上显示截断的名称值,并在我们放大时完成。
有没有办法用名称不会重叠的省略号或其他格式显示名称?
答案 0 :(得分:4)
alterTickMark:
上的SChartDelegate
方法允许您在将tickMark
(及其相应的tickLabel
)添加到轴之前对其进行修改。
您可以在此步骤中检查axisRange
,并确定range.span
是否足够小以至于您可以显示截断或完整的标签。
E.g。
-(void)sChart:(ShinobiChart *)chart alterTickMark:(SChartTickMark *)tickMark beforeAddingToAxis:(SChartAxis *)axis
{
if (!axis.isXAxis)
return;
if ([axis.axisRange.span doubleValue] > 5)
{
NSString *shortText = [tickMark.tickLabel.text substringToIndex:3];
tickMark.tickLabel.text = [NSString stringWithFormat:@"%@...", shortText];
//Resize, but maintain centering
CGPoint center = tickMark.tickLabel.center;
[tickMark.tickLabel sizeToFit];
tickMark.tickLabel.center = center;
}
}
作为完全披露,我为ShinobiControls工作。
答案 1 :(得分:0)
如果您需要在列系列中调整刻度标签宽度并启用缩放(这会在缩放手势后为标签腾出更多空间),只需实现SChart委托方法:
- (void)sChart:(ShinobiChart *)chart alterTickMark:(SChartTickMark *)tickMark beforeAddingToAxis:(SChartAxis *)axis
{
if (axis.isXAxis) {
// Adjusting tickmark labels
UILabel *label = [tickMark tickLabel];
CGFloat maxLabelWidth = axis.axisFrame.size.width / [axis.axisRange.span floatValue];
CGRect labelFrame = label.frame;
labelFrame.size.width = maxLabelWidth;
[label setFrame:labelFrame];
}
}
答案 2 :(得分:0)
查看longestLabelStringOn委托方法。例如:
func sChart(_ chart: ShinobiChart, longestLabelStringOn axis: SChartAxis) -> String? {
if axis == chart.xAxis{
return "Longest Possible String"
}
else{
return ""
}
}