Можно ли изменить цвет заголовка/подзаголовка меток в MKMarkerAnnotationView на iOS?

Вопрос или проблема

Я работаю с приложением для iOS, использующим карту, полную MKMarkerAnnotationView объектов. Я имеюсь дело с типичными пользовательскими маркерами, которые можно настроить, изменить значок, цвет и так далее… Всё это работает нормально.

Дело в том, что у моих аннотаций также установлены атрибуты title и subtitle, поэтому они отображаются на карте прямо под маркером… Но я заметил, что эти 2 текста всегда отображаются черным цветом с красивой тонкой белой обводкой вокруг букв…

Я действительно искал это, но не смог ничего найти, поэтому спрашиваю здесь:

  • Можно ли изменить цвет отображения меток title и subtitle в MKMarkerAnnotationView?

вставьте описание изображения здесь

С уважением

Ответ или решение

К сожалению, в текущей реализации MKMarkerAnnotationView в iOS нет возможности напрямую изменить цвет или оттенок текста заголовка (title) и подзаголовка (subtitle). Система использует фиксированные стили для отображения текста аннотаций, который, как вы упомянули, отображается черным цветом с белой обводкой.

Тем не менее, если вам необходимо стилизовать текст ваших аннотаций, вы можете рассмотреть следующий обходной путь:

  1. Скрыть стандартные заголовки и подзаголовки аннотаций: Для этого вы можете установить title и subtitle аннотации в nil, если вы не хотите, чтобы они отображались на карте.

  2. Использовать кастомный компонент для отображения текста: Создайте свой собственный вид, который будет представлять аннотации на карте. Например, вы можете использовать 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
       }
    }
  3. Настройка аннотаций: При создании своих аннотаций в методе 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
    }

Эти шаги могут помочь вам достигнуть необходимого результата и настроить цвет заголовка и подзаголовка именно так, как вам нужно. Надеюсь, это поможет вам в разработке вашего приложения!

Оцените материал
Добавить комментарий

Капча загружается...