LineChart XAxis метки глюк - PullRequest
       38

LineChart XAxis метки глюк

0 голосов
/ 14 апреля 2020

, чтобы уточнить, (данные / диаграммы) LineChartView, сценарий должен иметь диаграмму, подобную приложению здоровья Apple (например, гистограмму шагов). добавлено UISegmentControl для переключения между 3 сегментами временной сегментации: (еженедельно, ежемесячно, ежегодно)

Я использовал chartView.setVisibleXRange(minXRange: 0, maxXRange: viewModel.lineChartXrangeMax), чтобы иметь эффект подкачки, и пользователь может прокручивать (перетаскивать) от конца к началу графика.


здесь проблема:

segmentedControl имеет индекс 0: еженедельно: viewModel.lineChartXrangeMax = 7 нажмите на SegmentedControl, измените индекс на 1: ежемесячно: viewModel.lineChartXrangeMax = 31

Я загрузил GIF проблемы.

  1. почему у меня нет ровно 31 видимой записи?
  2. выглядят метки xAxis при перетаскивании.

Спасибо всем.

XAxis lables glitching on drag

Диаграмма настройки:

chartView.delegate = self
chartView.minOffset = 0
chartView.backgroundColor = .clear
chartView.drawGridBackgroundEnabled = false
chartView.drawBordersEnabled = false
chartView.highlightPerTapEnabled = true
chartView.highlightPerDragEnabled = true
chartView.dragEnabled = true
chartView.dragYEnabled = false
chartView.chartDescription?.enabled = false
chartView.pinchZoomEnabled = false
chartView.setScaleEnabled(false)

let legend = chartView.legend
legend.enabled = false

let xAxis = chartView.xAxis
xAxis.labelPosition = .bottom
xAxis.labelFont = .systemFont(ofSize: 12)
xAxis.labelTextColor = UIColor.SystemColors.secondaryLabel
xAxis.axisLineColor = .clear
xAxis.gridColor = UIColor.SystemColors.tertiarySystemFill
xAxis.gridLineCap = .round
xAxis.avoidFirstLastClippingEnabled = true

chartView.rightAxis.enabled = false

chartView.leftAxis.enabled = true
chartView.leftAxis.drawAxisLineEnabled = false
chartView.leftAxis.drawLabelsEnabled = false
chartView.leftAxis.drawGridLinesEnabled = false

Диаграмма Upadete (после изменения значения segmentedControl):

chartView.data = viewModel.lineChartData
chartView.xAxis.granularity = 1
chartView.moveViewToX(chartView.chartXMax-1)
chartView.xAxis.valueFormatter = viewModel.xAxisFormatter
chartView.notifyDataSetChanged()
chartView.setVisibleXRange(minXRange: 0, maxXRange: viewModel.lineChartXrangeMax) // if on weekly = 7, monthly = 31
...