Ios MKMapView在第一次出现时未正确居中(但此后仍有效)

Ios MKMapView在第一次出现时未正确居中(但此后仍有效),ios,cllocation,mkmapview,Ios,Cllocation,Mkmapview,我有一个master detail应用程序,master是一个UITableView,包含一个列表,每个列表都有一个位置(纬度和经度)。当用户点击一个列表项时,他们会得到一个包含MKMapView的详细视图,其中包含相关的注释 设置要显示的区域的代码如下所示。然而,当用户第一次点击列表中的某个项目时,地图视图显示了半个世界,显然以0,0为中心。放置的注释(代码未显示)位于适当的位置,但中心和比例都错误。如果用户返回主列表并再次点击该项(或点击任何其他项),则地图将正确居中并调整大小,代码将正常工

我有一个master detail应用程序,master是一个UITableView,包含一个列表,每个列表都有一个位置(纬度和经度)。当用户点击一个列表项时,他们会得到一个包含MKMapView的详细视图,其中包含相关的注释

设置要显示的区域的代码如下所示。然而,当用户第一次点击列表中的某个项目时,地图视图显示了半个世界,显然以0,0为中心。放置的注释(代码未显示)位于适当的位置,但中心和比例都错误。如果用户返回主列表并再次点击该项(或点击任何其他项),则地图将正确居中并调整大小,代码将正常工作。我无法确定为什么mapView第一次没有正确响应setRegion调用

下面的代码位于详图控制器的ViewWillAspect方法中,但如果将其置于viewDidLoad中,甚至置于主视图控制器的prepareForSegue方法中,效果相同

我还尝试将区域的初始声明更改为不同的坐标,认为这可能是问题所在,但事实并非如此……无论我在初始化区域时使用什么值,或者即使我没有设置它的初始值,行为都是相同的

另一个SO用户问了相同的问题(),但没有一个答案能解决问题

fwiw,局部视图控制器被声明为MKMapView委托,并被指定为mapView的委托,但我尚未实现任何委托方法(它也是MKAnnotation委托,我已实现mapView:viewForAnnotation)

任何关于我需要将此代码放置在何处,或者我需要实现何种委托方法的指导,以便在mapView第一次出现时能够进行适当的居中和缩放,都将不胜感激

代码如下:

 CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake([self.listing.latitude doubleValue], [self.listing.longitude doubleValue]);
MKPointAnnotation *selectedListingAnnotation=[[MKPointAnnotation alloc] init];
selectedListingAnnotation.coordinate=coordinates;

MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
region.center = coordinates;
region.span.longitudeDelta = 0.02f;
region.span.latitudeDelta  = 0.02f;
[self.mapView setRegion:region animated:YES];
if (selectedListingAnnotation) {
    [self.mapView addAnnotation:selectedListingAnnotation];
}

viewdiload
方法中,将
annotations
添加到
mapview
后,使用以下代码居中:

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([self.listing.latitude doubleValue], [self.listing.longitude doubleValue]);
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.18;
span.longitudeDelta=0.18;    
region.span=span;
region.center=coordinate;
[self.mapView setRegion:region animated:TRUE];
[self.mapView regionThatFits:region];

我试过了,但它仍然会导致完全相同的行为…在细节视图(地图视图)的初始演示中,区域定位和大小不起作用…无论如何,感谢您的尝试…仍然需要解决方案PS。我已经检查了区域和坐标在第一次打开视图时是否具有正确的值,即问题不是我已经解决了它…关键是将代码放入ViewDidDisplay,而不是ViewWillDisplay或viewDidLoad(以及设置动画:否)…否则,对setRegion的第一次调用是对尚不存在的mapView进行的…我想另一种方法可能是在主控制器中的prepareForSegue中创建一个MKMapView并将其传递给detailView的属性mapView。。。