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