Вопрос или проблема
Я работаю с приложением для iOS, использующим карту, полную MKMarkerAnnotationView объектов. Я имеюсь дело с типичными пользовательскими маркерами, которые можно настроить, изменить значок, цвет и так далее… Всё это работает нормально.
Дело в том, что у моих аннотаций также установлены атрибуты title и subtitle, поэтому они отображаются на карте прямо под маркером… Но я заметил, что эти 2 текста всегда отображаются черным цветом с красивой тонкой белой обводкой вокруг букв…
Я действительно искал это, но не смог ничего найти, поэтому спрашиваю здесь:
- Можно ли изменить цвет отображения меток title и subtitle в MKMarkerAnnotationView?
С уважением
Ответ или решение
К сожалению, в текущей реализации MKMarkerAnnotationView
в iOS нет возможности напрямую изменить цвет или оттенок текста заголовка (title
) и подзаголовка (subtitle
). Система использует фиксированные стили для отображения текста аннотаций, который, как вы упомянули, отображается черным цветом с белой обводкой.
Тем не менее, если вам необходимо стилизовать текст ваших аннотаций, вы можете рассмотреть следующий обходной путь:
-
Скрыть стандартные заголовки и подзаголовки аннотаций: Для этого вы можете установить
title
иsubtitle
аннотации в nil, если вы не хотите, чтобы они отображались на карте. -
Использовать кастомный компонент для отображения текста: Создайте свой собственный вид, который будет представлять аннотации на карте. Например, вы можете использовать
UILabel
для отображения текста на кастомномUIView
, а затем добавьте этот вид в качестве сабвью к вашемуMKMarkerAnnotationView
:class CustomMarkerAnnotationView: MKMarkerAnnotationView { override var annotation: MKAnnotation? { willSet { canShowCallout = true } } func setupCustomLabel(title: String?, subtitle: String?) { let titleLabel = UILabel() titleLabel.text = title titleLabel.textColor = UIColor.red // Задайте желаемый цвет текста titleLabel.font = UIFont.boldSystemFont(ofSize: 14) // Настройте дополнительные параметры для titleLabel let subtitleLabel = UILabel() subtitleLabel.text = subtitle subtitleLabel.textColor = UIColor.green // Задайте желаемый цвет текста subtitleLabel.font = UIFont.systemFont(ofSize: 12) // Настройте дополнительные параметры для subtitleLabel let stackView = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel]) stackView.axis = .vertical stackView.alignment = .center stackView.distribution = .fill stackView.spacing = 2 stackView.translatesAutoresizingMaskIntoConstraints = false self.addSubview(stackView) // Настройте констрейнты для stackView } }
-
Настройка аннотаций: При создании своих аннотаций в методе
mapView(_:viewFor:)
используйте новый классCustomMarkerAnnotationView
и передайте нужные значения заголовка и подзаголовка:func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { guard let customAnnotation = annotation as? CustomAnnotation else { return nil } let annotationView = CustomMarkerAnnotationView(annotation: customAnnotation, reuseIdentifier: "customMarker") annotationView.setupCustomLabel(title: customAnnotation.title, subtitle: customAnnotation.subtitle) return annotationView }
Эти шаги могут помочь вам достигнуть необходимого результата и настроить цвет заголовка и подзаголовка именно так, как вам нужно. Надеюсь, это поможет вам в разработке вашего приложения!