Shinobi图表中的X轴标签格式

时间:2014-04-16 06:03:53

标签: ios shinobi

我有一个名称与年龄的图表,其中名称在x轴上,值在Y轴上。 问题是名称在x轴上重叠,看起来不太好。

我找不到任何格式用于在x轴上显示截断的名称值,并在我们放大时完成。

有没有办法用名称不会重叠的省略号或其他格式显示名称?

3 个答案:

答案 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 ""
        }
    }