SwiftUI Charts, как избежать автоматической группировки элементов доступности на графике

У меня есть диаграмма BarMark, и я использую .accessibilityLabel и .accessibilityValue, чтобы настроить текст доступности для каждого столбца. При небольшом количестве полос на графике эта логика работает нормально, но когда полосок больше, они автоматически группируются и портят доступность текста. Интересно, можно ли как-нибудь избежать этой автоматической группировки?

Это мой код

    var body: some View {
        let salesData: [(Date, Double)] = [
                (Date().addingTimeInterval(-1 * 24 * 60 * 60), 120),
                (Date().addingTimeInterval(-2 * 24 * 60 * 60), 150),
                (Date().addingTimeInterval(-3 * 24 * 60 * 60), 100),
                (Date().addingTimeInterval(-4 * 24 * 60 * 60), 50),
                (Date().addingTimeInterval(-5 * 24 * 60 * 60), 150),
                (Date().addingTimeInterval(-6 * 24 * 60 * 60), 140),
                (Date().addingTimeInterval(-7 * 24 * 60 * 60), 130),
                (Date().addingTimeInterval(-8 * 24 * 60 * 60), 180),
                (Date().addingTimeInterval(-9 * 24 * 60 * 60), 50),
                (Date().addingTimeInterval(-10 * 24 * 60 * 60), 80),
                (Date().addingTimeInterval(-11 * 24 * 60 * 60), 80),
                (Date().addingTimeInterval(-12 * 24 * 60 * 60), 100),
                (Date().addingTimeInterval(-13 * 24 * 60 * 60), 150),
                (Date().addingTimeInterval(-14 * 24 * 60 * 60), 150),
                (Date().addingTimeInterval(-15 * 24 * 60 * 60), 90),
            ]

                Chart {
                    ForEach(salesData, id: \.0) {  date, sales in
                        BarMark(
                          x: .value("Day", date),
                          y: .value("Amount", sales)
                        ).accessibilityLabel(date.formatted(date: .abbreviated, time: .omitted))
                            .accessibilityValue("Amount: \(sales.formatted(.currency(code: "USD")))")
                      }
                }
                .accessibilityElement(children: .contain)
                .frame(height: 300)
    }

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

Я не уверен, есть ли какая-либо настройка, позволяющая избежать этой автоматической группировки, мне нужно поведение, подобное диаграмме активности в приложении «Здоровье». SwiftUI Charts, как избежать автоматической группировки элементов доступности на графике

Кажется, ваш код работает нормально с данными за 12 или менее дней. Возможно, стоит подумать о составлении графика за неделю или предыдущие 10 дней.

Marcy 21.08.2024 20:30

к сожалению, мое требование показывает данные за целый месяц

Huy Vu 21.08.2024 20:36

@HuyVu с той же проблемой

byaruhaf 22.08.2024 10:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что группировка работает нормально, если значения x форматируются как строки, а не оставляют значения x как даты:

x: .value("Day", date.formatted(date: .abbreviated , time: .omitted)),

Затем можно выбрать один день:

Внесение этого одного изменения повлекло за собой другие изменения, которые вы, возможно, захотите откорректировать. Поскольку значения x являются строками, порядок отображения — это порядок массива, а не порядок дат.

Исправление меток: дата каждого дня теперь отображается вдоль оси X. Ниже приведено исправление для этих сжатых меток, которые нужно добавить в диаграмму:

.chartXAxis(content: {
    AxisMarks { value in
        AxisValueLabel (orientation: .vertical) {
            if let displayValue = value.as(String.self) {
                Text(displayValue)
            }
        }
    }
})

Большое спасибо, @Марси! Это именно то, что мне нужно

Huy Vu 27.08.2024 16:08

Другие вопросы по теме