【问题标题】:piecharts (iOS charts) not displayed in custom tableviewcell饼图(iOS 图表)未显示在自定义 uitableviewcell 中
【发布时间】:2019-11-10 14:47:49
【问题描述】:

screenshot

我的自定义表格视图单元格中没有显示饼图有问题。 表格视图单元格是通过情节提要添加的,每个单元格包含一个小图标图像、两个标签和一个 UIView,我在视图检查器中将其设置为 PieChartView。

两个标签中的小图标图像和文本显示正常,没有问题。但是,对于饼图,我没有收到任何错误消息,只是没有显示任何图表。表格显示出来,在标签中填充了正确的文本,但除了饼图的中间孔之外,饼图视图是空的。当我单击其中一个时,会显示饼图视图 - 不完全正确(仅显示两个饼图中的一个,另一部分丢失)。

因此,触摸事件使切片可见,但我希望在为行函数运行单元格时饼图对所有单元格可见。

我已经为 tableviewcontroller 和 tableviewcell 添加了代码。如果有人能指出我的错误,那就太好了。我已经研究并尝试了很多,其中包括以下堆栈溢出资源: Charts not plotting in tableViewCell iosChart not displaying LineChartView points in UITableViewCell Adding a SubView to UITableViewCell doesn't get displayed How to implement iOS Chart in a tableview cell?

截图显示了我点击一些不可见的饼图后的情况。它们变得可见,当我向下滚动表格时,随机单元格中的更多(不是全部)饼图可见,有些则不可见。

tableviewcontroller 的代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "easyAndDiffAllWordsCell", for: indexPath) as! BVBResultsDiffAndEasyAllWordsGraphTableViewCell

        let easyVoc = parsedInEasyVocStructures[indexPath.row]

        //get the current voc for the writings
        let currentVoc = BVBVocabularyManager.getVoc()

        cell.label1.text = currentVoc.kanji

        cell.label2.text = currentVoc.kanji2

        let image = UIImage(named: "plus")
        cell.plusMinusImage.image = image

        //set the percentages
        cell.percentageSolved = arrayOfSuccessPercentagesForPieChart
        cell.percentageNotSolved = arrayOfNegativeSuccessPercentagesForPieChart

        cell.setChart(forIndexNo:indexPath.row, dataPoints: months, valuesSolved: arrayOfSuccessPercentagesForPieChart, valuedNonSolved: arrayOfNegativeSuccessPercentagesForPieChart)

        cell.setNeedsDisplay()
        cell.pieChartView.clipsToBounds = true
        cell.pieChartView.layer.masksToBounds = true
        cell.pieChartView.contentMode = .scaleAspectFit

        return cell
    }

对于tableViewCell:

class BVBResultsDiffAndEasyAllWordsGraphTableViewCell: UITableViewCell {

    @IBOutlet weak var kanjiL: UILabel!
    @IBOutlet weak var translationL: UILabel!
    @IBOutlet weak var pieChartView: PieChartView!

    @IBOutlet weak var plusMinusImage: UIImageView!

    var testconditions: Array<String>?
    var percentageSolved: Array<Int>? 
    var percentageNotSolved: Array<Int>? 

    var solvedPercentageDataEntry = PieChartDataEntry(value: 0)
    var nonSolvedPercentageDataEntry = PieChartDataEntry(value: 0)

    var percentageSolvedNonSolvedDataEntries = [PieChartDataEntry]()


    override func awakeFromNib() {
        super.awakeFromNib()

        solvedPercentageDataEntry.label = NSLocalizedString("solved", comment: "piechart label for the solved area")
        pieChartView.chartDescription?.text = ""
        pieChartView.legend.enabled = false
        pieChartView.setExtraOffsets(left: 2, top: 0, right: 2, bottom: 0)

        pieChartView.holeRadiusPercent = 2.8     
 }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state

        //not used
    }


    func setChart(forIndexNo: Int, dataPoints: [String], valuesSolved: [Int], valuedNonSolved: [Int]){

        var dataEntries: [PieChartDataEntry] = []

        solvedPercentageDataEntry = PieChartDataEntry(value: Double(valuesSolved[forIndexNo]), label: "")
        nonSolvedPercentageDataEntry = PieChartDataEntry(value:Double(valuedNonSolved[forIndexNo]), label: "")

        dataEntries = [solvedPercentageDataEntry, nonSolvedPercentageDataEntry]

        percentageSolvedNonSolvedDataEntries = [solvedPercentageDataEntry, nonSolvedPercentageDataEntry]

        let pieChartDataSet = PieChartDataSet(entries: percentageSolvedNonSolvedDataEntries, label: nil)

        pieChartDataSet.drawValuesEnabled = false 

        let pieChartData = PieChartData(dataSet: pieChartDataSet)

        let colors = [UIColor.themeColor(), UIColor.red]

        pieChartDataSet.colors = colors as! [NSUIColor]

        pieChartView.data = pieChartData

        pieChartView.notifyDataSetChanged()
    }

}

【问题讨论】:

    标签: ios swift uitableview charts


    【解决方案1】:

    我测试你的代码。它工作正常。 而中间的洞,可能是配置问题。尝试添加这个

        pieChartDataSet.drawIconsEnabled = false
        pieChartDataSet.sliceSpace = 1
        pieChartDataSet.highlightColor = UIColor.white
        pieChartDataSet.entryLabelColor = UIColor.white
        pieChartDataSet.selectionShift = 0
    
        pieChartView.holeRadiusPercent = 0.5
        pieChartView.transparentCircleRadiusPercent = 0.0
    

    希望对你有帮助

    【讨论】:

    • 非常感谢您的工作。我没有逐行添加 - 删除,所以不确定哪一个做了魔法,但现在所有饼图都按预期显示!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多