Swift Charts蜡烛图仅放大显示全量数据 启动即显所有项如何实现
解决方案
核心原因
- 初始仅显示1条蜡烛:X轴默认可见范围配置不符合数据总量,默认仅展示最左侧1条数据,手动缩放后触发视图范围重算才展示全量数据
- 开启
autoScaleMinMaxEnabled后无内容:该属性依赖数据集的极值预计算,在数据未完成加载渲染时开启会触发计算异常,导致无内容渲染
修复步骤
- 配置X轴可见范围适配数据总量,赋值数据后手动触发视图刷新和全量展示
- 调整
autoScaleMinMaxEnabled的开启时机,避免提前开启导致渲染异常
修改后代码
func setupCandleChart() { // 配置X轴最小间隔为1,避免条目重叠 candleChartView.xAxis.granularity = 1 setCandleDataCount(5, range: 30) // 数据加载完成后再开启自动缩放极值计算(如不需要该功能可删除) candleChartView.autoScaleMinMaxEnabled = true // 定位到第一条数据并自适应屏幕展示全量数据 candleChartView.moveViewToX(0) candleChartView.fitScreen() } func setCandleDataCount(_ count: Int, range: UInt32) { let yVals1 = (0..<count).map { (i) -> CandleChartDataEntry in let mult = range + 1 let val = Double(arc4random_uniform(40) + mult) let high = Double(arc4random_uniform(9) + 8) let low = Double(arc4random_uniform(9) + 8) let open = Double(arc4random_uniform(6) + 1) let close = Double(arc4random_uniform(6) + 1) let even = i % 2 == 0 return CandleChartDataEntry(x: Double(i), shadowH: val + high, shadowL: val - low, open: even ? val + open : val - open, close: even ? val - close : val + close) } let set1 = CandleChartDataSet(entries: yVals1, label: "Data Set") let data = CandleChartData(dataSet: set1) candleChartView.data = data // 通知图表数据集已变更,触发内部计算 candleChartView.notifyDataSetChanged() // 设置X轴最大可见条目数为数据总量,保证所有数据可在一屏展示 candleChartView.setVisibleXRangeMaximum(Double(count)) }
补充说明
如果数据量较大不需要一屏展示所有,可调整setVisibleXRangeMaximum的参数为期望的单屏可见条目数,初始加载后会默认展示对应数量的条目,不会仅出现1条。
内容的提问来源于stack exchange,提问作者user883884
相关产品推荐
相关产品推荐

