1

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

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

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

4

3 回答 3

4

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 工作。

于 2014-04-17T08:12:57.930 回答
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];
    }
}
于 2015-08-21T13:11:17.663 回答
0

查看最长的LabelStringOn 委托方法。例子:

func sChart(_ chart: ShinobiChart, longestLabelStringOn axis: SChartAxis) -> String? {
        if axis == chart.xAxis{
            return "Longest Possible String"
        }
        else{
            return ""
        }
    }
于 2018-01-30T18:40:20.080 回答