0

我正在使用自定義MKAnnotationView。我使用工作正常的autolayouts,但註釋視圖的位置(框架)不合適。設置自定義MKAnnotationView的中心

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 
{ 
    if view.annotation is MKUserLocation 
    { 
     return 
    } 

    let starbucksAnnotation = view.annotation as! LiquorLocation 
    let views = Bundle.main.loadNibNamed("CustomCalloutView", owner: nil, options: nil) 
    let calloutView = views?[0] as! CustomCalloutView 
    calloutView.labelLiquorShopName.text = starbucksAnnotation.title 
    calloutView.labelLiquorShopAddress.text = starbucksAnnotation.address 
    calloutView.labelLiquorShopAwayDistance.text = starbucksAnnotation.locationKmAway 
    calloutView.imageViewLiquorShop.image = starbucksAnnotation.liquorShopIcon 


    calloutView.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(calloutView) 
    mapView.setCenter((view.annotation?.coordinate)!, animated: true) 
} 

enter image description here

我做錯了嗎?我想將註釋視圖置於銷釘的頂部。

回答

0

Autolayouts再次拯救我的一天。我在我的calloutview和view(MKAnnotationView)之間添加布局約束。我在didSelect方法中寫下view.addSubview(calloutView)下方的行。

let horizontalConstraint = NSLayoutConstraint(item: calloutView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0) 
     let verticalConstraint = NSLayoutConstraint(item: calloutView, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0) 
     let widthConstraint = NSLayoutConstraint(item: calloutView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: calloutView.frame.size.width) 
     view.addConstraints([horizontalConstraint, verticalConstraint, widthConstraint])