Я не разрабатывал в течение почти 20 лет, но я нахожу, что использование IDE / отладчик могу:
Хорошо, поэтому для решения используйте метод из MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
. В этом методе вы должны изменить порядок AnnotationView после того, как он был добавлен в представление mapKit. Итак, код может выглядеть так:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for (MKAnnotationView * annView in views) {
TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView annotation];
if ([ann top]) {
[[annView superview] bringSubviewToFront:annView];
} else {
[[annView superview] sendSubviewToBack:annView];
}
}
}
У меня работает.
Я обнаружил, что это переупорядочение представлений аннотаций приводит к тому, что выноска, которая появляется при нажатии на одну из них, больше не находится поверх всех аннотаций. Я даже пробовал доработать его так, чтобы вместо приноситьSubviewToFront
и sendSubviewToBack
я использовал insertSubview: aboveSubview
и insertSubview: belowSubview], где 1118787 второй аргумент - это первый элемент annotationView в списке. Казалось бы, это приведет к гораздо меньшему рассеянию спереди назад, но выноски по-прежнему появляются под некоторыми аннотациями.