Нажатие на пульсирующий синий круг, представляющий пользовательскую область, вызывает выноску "Текущее местоположение". Есть ли способ подавить это?
Как подавить выноску "Текущее местоположение" в виде карты
Ответ 1
В окне аннотации вы можете изменить свойство после изменения местоположения пользователя:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKAnnotationView *userLocationView = [mapView viewForAnnotation:userLocation];
userLocationView.canShowCallout = NO;
}
Ответ 2
Вы можете установить для title
значение пустым для подавления выноски:
mapView.userLocation.title = @"";
Edit:
Более надежным способом может быть удаление заголовка в методе делегата didUpdateUserLocation
:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
userLocation.title = @"";
}
или в viewForAnnotation
:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
((MKUserLocation *)annotation).title = @"";
return nil;
}
...
}
Настройка заголовка в методах делегата позволяет убедиться, что у вас есть реальный экземпляр userLocation для работы.
Ответ 3
Swift 4 - Xcode 9.2 - iOS 11.2
// MARK: - MKMapViewDelegate
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let userLocation = annotation as? MKUserLocation {
userLocation.title = ""
return nil
}
// ...
}
Ответ 4
У меня есть два способа помочь вам:
-
подавить в mapViewDidFinishLoadingMap
func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { mapView.showsUserLocation = true //suppress the title mapView.userLocation.title = "My Location" //suppress other params
}
-
подавить в файле didUpdate
func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) { //suppress the title mapView.userLocation.title = "My Location" //suppress other params }
Ответ 5
Swift 4
// MARK: - MKMapViewDelegate
func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
if let userLocationView = mapView.view(for: mapView.userLocation) {
userLocationView.canShowCallout = false
}
}