Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ios图表约束为视图大小_Ios_Iphone_Swift_Ios Charts - Fatal编程技术网

如何将ios图表约束为视图大小

如何将ios图表约束为视图大小,ios,iphone,swift,ios-charts,Ios,Iphone,Swift,Ios Charts,编辑短版本: 我用ios图表和动态数据显示了一个图形,它把我的图形切掉了,所以图形的整个垂直部分没有正确显示。某些操作(如从横向转换为纵向或从横向转换为纵向)会导致图形正确显示 原始问题 我在运行ios 9.3的iPhone 6模拟器上显示了一个折线图,使用的是ios图表版本2.2.4,我遇到了一个问题,内容被垂直剪裁。。。有时候 该图表是一个向下展开图表,通过在另一个绘图中选择数据点触发。对于某些数据点,如果我先选择它们,向下钻取图表将被剪裁,如下所示: 但是,如果我先选择另一个数据点,然

编辑短版本: 我用ios图表和动态数据显示了一个图形,它把我的图形切掉了,所以图形的整个垂直部分没有正确显示。某些操作(如从横向转换为纵向或从横向转换为纵向)会导致图形正确显示


原始问题

我在运行ios 9.3的iPhone 6模拟器上显示了一个折线图,使用的是ios图表版本2.2.4,我遇到了一个问题,内容被垂直剪裁。。。有时候

该图表是一个向下展开图表,通过在另一个绘图中选择数据点触发。对于某些数据点,如果我先选择它们,向下钻取图表将被剪裁,如下所示:

但是,如果我先选择另一个数据点,然后重新选择刚刚剪裁的完全相同的数据点,则图表的渲染或多或少与预期一致:

我正在手动设置图表的最大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
}

编辑情节提要设置被省略,因为它们非常庞大,而且结果不相关

答案是在plot函数的末尾添加一个
notifyDataSetChanged()

根据我在MPAndroid图表(ios图表的Android版本)上找到的

notifyDataSetChanged():让图表知道其基础数据已更改,并执行所有必要的重新计算(偏移、图例、最大值、最小值等)。这在动态添加数据时尤其需要


答案是在plot函数的末尾添加一个
notifyDataSetChanged()

根据我在MPAndroid图表(ios图表的Android版本)上找到的

notifyDataSetChanged():让图表知道其基础数据已更改,并执行所有必要的重新计算(偏移、图例、最大值、最小值等)。这在动态添加数据时尤其需要


FWIW,在横向中打开绘图并旋转到纵向或相反方向,具有正确设置向下钻取大小的相同效果。FWIW,在横向中打开绘图并旋转到纵向或相反方向,具有正确设置向下钻取大小的相同效果。