Ios Shinobi甜甜圈图表标签重叠

Ios Shinobi甜甜圈图表标签重叠,ios,swift,donut-chart,shinobi,Ios,Swift,Donut Chart,Shinobi,我有一张使用Shinobi的甜甜圈图表。但根据数据,标签重叠 还有一个标签没有完全显示(最高付款) 我已经搜索了整个堆栈溢出,找不到任何解决方案。在Shinobi网站或他们的文档中也没有关于这个问题的内容 这是我的代码: import UIKit class MyViewController: UIViewController, SChartDatasource { var donutChartValues:[Double] = [] var donutChartLabels

我有一张使用Shinobi的甜甜圈图表。但根据数据,标签重叠

还有一个标签没有完全显示(最高付款)

我已经搜索了整个堆栈溢出,找不到任何解决方案。在Shinobi网站或他们的文档中也没有关于这个问题的内容

这是我的代码:

import UIKit

class MyViewController: UIViewController, SChartDatasource {
    var donutChartValues:[Double] = []
    var donutChartLabels:[String] = []
    @IBOutlet weak var chartView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        redrawChart()
    }

    func redrawChart() {
        setDonutChartValues()
        let chart = ShinobiChart(frame: chartView.bounds)
        chart.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        chart.backgroundColor = UIColor.clear
        chart.datasource = self
        chartView.addSubview(chart)
    }
    func setDonutChartValues () {
        donutChartValues.removeAll()
        donutChartLabels.removeAll()
        donutChartValues.append(2500.00)
        donutChartLabels.append("Max Payment")
        donutChartValues.append(300.0)
        donutChartLabels.append("Property Tax")
        donutChartValues.append(100.0)
        donutChartLabels.append("Condo Fees")
        donutChartValues.append(150.0)
        donutChartLabels.append("Heating Costs")
        donutChartValues.append(300.0)
        donutChartLabels.append("Debts")
        donutChartValues.append(4000.0)
        donutChartLabels.append("Other Expenses")
    }

    /********************************************************************************/
    // MARK: - SChartDatasource methods
    /********************************************************************************/

    func numberOfSeries(in chart: ShinobiChart) -> Int {
        return 1
    }

    func sChart(_ chart: ShinobiChart, seriesAt index: Int) -> SChartSeries {
        let donutSeries = SChartDonutSeries()
        donutSeries.style().spokeStyle.showSpokes = true;
        donutSeries.selectedStyle().spokeStyle.showSpokes = true;
        donutSeries.style().labelFontColor = UIColor.black
        donutSeries.selectedStyle().labelFontColor = UIColor.black
        return donutSeries
    }

    func sChart(_ chart: ShinobiChart, numberOfDataPointsForSeriesAt seriesIndex: Int) -> Int {
        return donutChartValues.count
    }

    func sChart(_ chart: ShinobiChart, dataPointAt dataIndex: Int, forSeriesAt seriesIndex: Int) -> SChartData {
        let dp = SChartDataPoint()
        dp.xValue = 0
        dp.yValue = (donutChartValues.count > dataIndex) ? donutChartValues[dataIndex] :  0
        return dp
    }

    func sChart(_ chart: ShinobiChart, labelForSliceAt sliceIndex: Int, in series: SChartRadialSeries) -> UILabel? {
        let sliceLabel = UILabel()
        sliceLabel.text = (donutChartLabels.count > sliceIndex) ? donutChartLabels[sliceIndex] :  ""
        return sliceLabel
    }
}

任何帮助都将不胜感激。

我相信您需要的是
sChart:alterLabel:forDatapoint:atSliceIndex:inRadiolSeries:NS\u SWIFT\u NAME:
SChartDelegate协议的方法

根据for-this方法,它“在添加到图表之前为每个饼/甜甜圈系列提供每个标签。使用它设置颜色、边框或重新定位标签”(强调添加)


这是一个如何实现它的示例。

我相信您需要的是
sChart:alterLabel:forDatapoint:atSliceIndex:InRadiolSeries:NS\u SWIFT\u NAME:
SChartDelegate协议的方法

根据for-this方法,它“在添加到图表之前为每个饼/甜甜圈系列提供每个标签。使用它设置颜色、边框或重新定位标签”(强调添加)


这是一个如何实现的示例。

正如Mike Traverse所建议的,调整标签中显示的文本的推荐方法是使用
sChart:alterLabel:forDataPoint:…
委托方法。这样可以避免您自己创建标签,您只需调整标签文本即可显示所需的值,例如:

func sChart(_ chart: ShinobiChart,
                alter label: UILabel,
                for datapoint: SChartRadialDataPoint,
                atSlice index: Int,
                in series: SChartRadialSeries) {
     label.text = datapoint.name
}
您需要分配图表的委托,然后稍微更改返回数据点的数据源方法:

func sChart(_ chart: ShinobiChart, dataPointAt dataIndex: Int, forSeriesAt seriesIndex: Int) -> SChartData {
        let dp = SChartDataPoint()
        dp.xValue = donutChartLabels[dataIndex]
        dp.yValue = (donutChartValues.count > dataIndex) ? donutChartValues[dataIndex] :  0
        return dp
}

该系列应将所有标签保持在图表的范围内,我恐怕无法复制您看到的问题,即您的付款标签被剪裁的位置。您确定图表视图没有超出屏幕边界吗?(检查这一点的一个好方法是使用工具)



甜甜圈系列没有做任何事情来防止轮辐标签重叠。不幸的是,如果您希望显示圆环系列中较小比例的数据点的辐条,那么您需要创建自己的实现来阻止重叠的发生。我当然会向团队提到这一点,我们会考虑在将来的版本中添加这个功能。 另一种解决方案可能是隐藏对应于小值的辐条,以便它们与相邻值重叠。您可以使用
SChartDonutSeries
方法
setSpokeStyle:forSpokeAtSliceIndex:
逐片执行此操作。然而,我知道这不是一个完美的解决方案



仅供将来参考,如果您可以在我们的网站上询问未来与shinobi相关的问题,那就太好了-这样可以更轻松地确保我们尽快回答您的问题,并查看您可能遇到的任何后续问题。

正如Mike Traverse所建议的,调整标签中显示的文本的建议方法是使用
sChart:alterLabel:forDataPoint:…
delegate方法。这样可以避免您自己创建标签,您只需调整标签文本即可显示所需的值,例如:

func sChart(_ chart: ShinobiChart,
                alter label: UILabel,
                for datapoint: SChartRadialDataPoint,
                atSlice index: Int,
                in series: SChartRadialSeries) {
     label.text = datapoint.name
}
您需要分配图表的委托,然后稍微更改返回数据点的数据源方法:

func sChart(_ chart: ShinobiChart, dataPointAt dataIndex: Int, forSeriesAt seriesIndex: Int) -> SChartData {
        let dp = SChartDataPoint()
        dp.xValue = donutChartLabels[dataIndex]
        dp.yValue = (donutChartValues.count > dataIndex) ? donutChartValues[dataIndex] :  0
        return dp
}

该系列应将所有标签保持在图表的范围内,我恐怕无法复制您看到的问题,即您的付款标签被剪裁的位置。您确定图表视图没有超出屏幕边界吗?(检查这一点的一个好方法是使用工具)



甜甜圈系列没有做任何事情来防止轮辐标签重叠。不幸的是,如果您希望显示圆环系列中较小比例的数据点的辐条,那么您需要创建自己的实现来阻止重叠的发生。我当然会向团队提到这一点,我们会考虑在将来的版本中添加这个功能。 另一种解决方案可能是隐藏对应于小值的辐条,以便它们与相邻值重叠。您可以使用
SChartDonutSeries
方法
setSpokeStyle:forSpokeAtSliceIndex:
逐片执行此操作。然而,我知道这不是一个完美的解决方案



仅供将来参考,如果您可以在我们的网站上询问未来与shinobi相关的问题,那就太好了-这样可以更轻松地确保我们尽快回答您的问题,并查看您可能遇到的任何后续问题。

谢谢,但计划中的数据会发生变化,我不认为有一种简单的方法可以让我计算基于新数据的标签是否重叠。谢谢,但是数据会在程序中发生变化,我不认为有一种简单的方法可以让我计算基于新数据的标签是否重叠。“甜甜圈系列没有做任何事情来防止轮辐标签重叠。“那太糟糕了……我最终自己创建了图例,没有使用轮辐标签……”甜甜圈系列没有做任何事情来防止轮辐标签重叠。“那太糟糕了……我最终自己创造了传奇,而没有使用轮辐标签。。。