Платформа iOS Charts MaximumFractionDigits не работает - PullRequest
0 голосов
/ 24 октября 2018

Я использую iOS Charts Framework для отображения гистограммы в моем приложении.Мой leftAxisFormatter выглядит следующим образом

let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"

Мой набор данных выглядит следующим образом

0 : ChartDataEntry, x: 0.0, y 0.0
1 : ChartDataEntry, x: 1.0, y 7.6
2 : ChartDataEntry, x: 2.0, y 0.0
3 : ChartDataEntry, x: 3.0, y 0.0
4 : ChartDataEntry, x: 4.0, y 48.07
5 : ChartDataEntry, x: 5.0, y 107.26
6 : ChartDataEntry, x: 6.0, y 0.0

Я показываю значение с помощью BalloonMarker Когда я нажимаю на гистограмму с графика, но значение вмаркер всегда показывает только одну цифру дроби, я пытался играть с NumberFormatter, но не повезло.

Пожалуйста, обратитесь к снимку экрана ниже, на котором я хочу показать 2 цифры дроби для значения, показанного в маркере, здесь должно быть107,26 согласно моему набору данных.

enter image description here Пожалуйста, подскажите, что я делаю не так?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете создать свои собственные Маркеры .Для простоты вы можете subClass BalloonMarker и переопределить setLabel для форматирования значения перед передачей в super's setLabel,

class MyCustomBaloon: BalloonMarker {

    override func setLabel(_ newLabel: String) {
        let value = String(format: "$%.2f", Double(newLabel) ?? 0.0)
        super.setLabel(value)
    }
}

Использование

let marker = MyCustomBaloon(color: UIColor(white: 180/255, alpha: 1),
                            font: .systemFont(ofSize: 12),
                            textColor: .white,
                            insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
marker.chartView = chartView
marker.minimumSize = CGSize(width: 80, height: 40)
chartView.marker = marker

Результат

enter image description here

0 голосов
/ 24 октября 2018

Ваш числовой форматер вернет 2-значную дробь, если имеется более 2-х дробных цифр, в противном случае он вернет те же цифры дроби, что и число.Например, см. Приведенные ниже выходы:

let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"

let number = 82.2343
print(leftAxisFormatter.string(for: number))

Optional("$82.23")

let number = 82
print(leftAxisFormatter.string(for: number))
Optional("$82")

let number = 82.1
print(leftAxisFormatter.string(for: number))
Optional("$82.1")

Итак, если вы всегда хотите получить двузначную дробь, просто установите минимальное значение 2 как,

leftAxisFormatter.minimumFractionDigits = 2

Теперь все выходыбудет 2 цифры, как показано ниже,

Optional("$82.23")
Optional("$82.00")
Optional("$82.10")
...