如何将ios-chart约束为视图的大小

编辑简短的版本:我正在显示一个graphics使用dynamic数据的ios图表,它正在切断我的图表,因此图表的完整垂直部分显示不正确。 某些操作(如从风景转换为人像或反之亦然)会导致graphics正确显示。


原来的问题

我正在iPhone 6模拟器上运行ios 9.3,使用ios-charts版本2.2.4显示线图,而且我遇到了内容被垂直剪切的问题… 有时

该图表是一个下钻图表,通过在另一个图表中select一个数据点来触发。 对于某些数据点,如果我先select它们,那么钻取图表会被剪切,如下所示:

由于某种原因,图表被剪断了31个左右

但是,如果我先select另一个数据点,然后重新select刚刚裁剪的相同数据点 ,则图表或多或less会按预期呈现:

图表没有被限制,并延伸到预期的66

我手动设置图表的最大Y值,并打印最大的Y值确认它确实被设置,所以我留下来相信,问题不在于图表格式,但可能以图表约束的方式本身的观点? 换句话说,也许这是一个布局/故事板的问题,有一个属性,我可以设置视图,甚至父视图,使这个渲染正确?

但是,这里是我用来生成图表的代码,以防万一我做了任何明显错误的事情:

... // Part where I actually get the data omitted bc its boring let chartDataSet = LineChartDataSet(yVals: dataEntries, label: "") let chartData = LineChartData(xVals: xVals, dataSet: chartDataSet) drilldownChart.data = chartData formatChart(drilldownChart, yMax: [runningTotal, Double(goal.target)].maxElement()!) chartDataSet.colors = [UIColor.blackColor()] chartDataSet.circleColors = [UIColor.blackColor()] chartDataSet.drawCirclesEnabled = false chartDataSet.drawFilledEnabled = true chartDataSet.fillColor = UIColor.blackColor() chartDataSet.fillAlpha = 1.0 chartDataSet.valueColors = dataPointLabelColors print(drilldownChart.chartYMax) // Still prints 66, y'know, just in case // Format a chart by eliminating grid lines, decimals, right axis, etc. func formatChart(chart: BarLineChartViewBase, yMax: Double) { let formatter = NSNumberFormatter() formatter.minimumFractionDigits = 0 chart.xAxis.labelPosition = .Bottom chart.xAxis.gridColor = UIColor.clearColor() chart.leftAxis.axisMinValue = 0.0 chart.leftAxis.valueFormatter = formatter chart.leftAxis.granularity = 1 // Sets a minimum granularity, but allows for higher granularities chart.leftAxis.axisMaxValue = [1.0, yMax * 1.1].maxElement()! chart.leftAxis.gridColor = UIColor.clearColor() chart.rightAxis.enabled = false chart.legend.enabled = false chart.data!.setValueFormatter(formatter) if (chart.data!.xValCount > 20) { chart.data!.setDrawValues(false) } chart.descriptionText = "" chart.animate(xAxisDuration: 1.0, yAxisDuration: 1.0, easingOption: .Linear) chart.pinchZoomEnabled = false chart.doubleTapToZoomEnabled = false let limit = ChartLimitLine(limit: Double(goal!.target), label: "") limit.lineColor = UIColor.blackColor() limit.lineDashLengths = [4.0, 2.0] chart.leftAxis.addLimitLine(limit) print(chart.leftAxis.axisMaxValue) // prints 66 print(chart.chartYMax) // Prints 66 } 

编辑故事板设置被省略,因为它们是巨大的,事实certificate不相关

答案是将一个notifyDataSetChanged()添加到绘图函数的末尾。

根据我在MPAndroid Chart(ios-Charts的Android版本)上find的这个文档 ,

notifyDataSetChanged():让图表知道它是[原文]基础数据已更改,并执行所有必要的重新计算(偏移,图例,最大值,最小值…)。 这是dynamic添加数据时特别需要的。