我有一张姓名与年龄的图表,其中姓名在 x 轴上,值在 Y 轴上。问题是名称在 x 轴上重叠,看起来不太好。
我找不到任何格式来在 x 轴上显示截断的名称值,并在我们放大时完成。
有没有办法用省略号或其他格式显示名称不会重叠的名称?
alterTickMark:
on 方法SChartDelegate
允许您在将 a (tickMark
及其对应tickLabel
的 )添加到轴之前对其进行修改。
您可能会axisRange
在此步骤中检查 ,并确定 是否range.span
足够小,您可以显示截断或完整的标签。
例如
-(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 工作。
如果您需要调整列系列中的刻度标签宽度并启用缩放(缩放手势后为标签腾出更多空间),只需实现 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];
}
}
查看最长的LabelStringOn 委托方法。例子:
func sChart(_ chart: ShinobiChart, longestLabelStringOn axis: SChartAxis) -> String? {
if axis == chart.xAxis{
return "Longest Possible String"
}
else{
return ""
}
}