2016-04-23 57 views
1

編輯簡版: 我正在使用帶有動態數據的ios圖表顯示一個圖形,並且它正在切斷我的圖形,因此圖形的完整垂直部分不是' t正確顯示。某些操作(如從風景轉換爲人像或反之亦然)會導致圖形正確顯示。如何將ios圖表約束爲視圖大小


原始的問題

我在iPhone模擬器6顯示了曲線圖,運行iOS 9.3,使用的是iOS,圖表版本2.2.4,和我遇到了一個問題,內容獲取垂直修剪... 有時

該圖表是向下鑽取的圖表,通過選擇另一個圖表中的數據點來觸發。對於一些數據點,如果我選擇他們第一,在深入分析圖表將被剪掉,就像這樣:

Chart is clipped around 31 for some reason

但是,如果我選擇另一數據點,然後再重新選擇此完全相同的數據點剛修剪,圖表呈現或多或少按預期:

Chart is not clipped and extends to ~66 as expected

我手動設置圖表的最大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 
} 

編輯省略故事板的設置,因爲他們是巨大的,它原來不相關

+0

FWIW,在橫向打開繪圖並旋轉到縱向或反之亦然具有相同的正確下鑽尺寸的效果。 –

回答

0

答案是在plot函數的末尾添加notifyDataSetChanged()

this documentation我上MPAndroid圖表(的IOS-圖表Android版本)發現,

notifyDataSetChanged():讓圖表知道它的[原文如此]基礎數據已更改並執行所有必需的重新計算(偏移,傳說,最大值,最小值,...)。這在動態添加數據時尤其需要。

相關問題