You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Charts蜡烛图仅放大显示全量数据 启动即显所有项如何实现

解决方案

核心原因

  • 初始仅显示1条蜡烛:X轴默认可见范围配置不符合数据总量,默认仅展示最左侧1条数据,手动缩放后触发视图范围重算才展示全量数据
  • 开启autoScaleMinMaxEnabled后无内容:该属性依赖数据集的极值预计算,在数据未完成加载渲染时开启会触发计算异常,导致无内容渲染

修复步骤

  1. 配置X轴可见范围适配数据总量,赋值数据后手动触发视图刷新和全量展示
  2. 调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:39:04