Mapkit: problème d'affichage de AnnotationView

Voilà, j’essaye de développer une app basée sur une carte, donc Mapkit et MKAnnotation.
Dans ma fonction mapView, j’ai crée une stackView dans laquelle j’ai ajouté un label et un bouton. J’ai assigné cette stackView au annotationView.detailCalloutAccessoryView, et l’annotation est bien affichée comme je veux:

En voulant mettre un peu d’ordre dans mon code et suivre le design pattern MVC, j’ai voulu déplacer ma stackView dans une classe à part: CustomView:

override init ( frame: CGRect)
    {
        var frame = frame
        frame = CGRect(x: 0, y: 0, width: 100, height: 200)
        super.init(frame: frame)
        self.axis = .vertical
        self.distribution = .fillEqually
        self.alignment = .fill
        self.spacing = 2
        self.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin, .flexibleWidth, .flexibleHeight]
    }

required init(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func addView(subtitle:String, tel:String)
{
    let subtitleView = UILabel()
    subtitleView.font = subtitleView.font.withSize(12)
    subtitleView.textColor = UIColor.black
    subtitleView.numberOfLines = 1
    subtitleView.text = subtitle
    self.addArrangedSubview(subtitleView)
    
    let buttonTel = UIButton(type: .system)
    buttonTel.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
    buttonTel.addTarget(self, action: Selector(("callUser:")), for: UIControlEvents.touchUpInside)
    self.addArrangedSubview(buttonTel)
}

Dans mon ViewController, j’initialise ma vue let stackView = CustomView(frame: CGRect(x: 0, y: 0, width: 100, height: 400)) et je crée mes composants: stackView.addView(subtitle: annotation.subtitle!!, tel: cpa.telString!).

Et là, c’est le bug !!

Seulement une partie de l’annotation apparait:

J’ai bien essayé d’ajouter des contraintes, notamment de hauteur, mais rien n’y a fait. Alors que quand le code était dans mapView, l’annotationView s’adaptait automatiquement à ma stackView, ce n’est plus le cas lorsque celle-ci est appelée d’une autre classe.

Si quelqu’un a une petite idée du pourquoi de ce problème d’affichage, je suis prenneur :face_with_raised_eyebrow:

Dans le constructeur de ta vue custom tu ignore la frame reçue car tu en crée une autre locale avec le même nom.
Tu lui affectes toujours la hauteur 200, indépendamment de la hauteur que tu as reçu en paramètre.

Supprime tes 2 premières lignes et ça devrait mieux marcher :slight_smile:

Salut Maxime,
j’ai supprimé var frame = frame et frame = CGRect(x: 0, y: 0, width: 100, height: 200) mais mon AnnotationView est toujours tronquée :disappointed_relieved: