iOS mapview 自动布局问题
Posted
技术标签:
【中文标题】iOS mapview 自动布局问题【英文标题】:iOS mapview auto layout issue 【发布时间】:2013-05-19 08:08:17 【问题描述】:我正在创建一个带有情节提要的标签栏应用程序。
基本上在 SecondViewController 上,我设置了一个 MKMapView,顶部有一个工具栏,用于更改视图等。
我设置了该跨度并添加了一个在加载屏幕时显示的注释,它在使用 AutoLayout:Off 时正确显示,如下所示
(抱歉,我无法在此处嵌入新链接)
http://img211.imageshack.us/img211/9359/mvautooff1.jpg
当我将 AutoLayout 设置为 On 时,它会这样做
http://img153.imageshack.us/img153/3736/mvautoon.jpg
我尝试更改跨度等,但运行模拟器时没有任何变化。
我怎样才能改变它,让 MapView 像 AutoLayout 关闭时一样显示?
有人可以帮我吗,因为我喜欢 AutoLayout 在它为设备等调整大小时打开,但我需要 MapView 来显示它在 AutoLayout 关闭时是如何工作的。
我对 ios 编码非常陌生,完全是个新手
任何帮助将不胜感激!
谢谢
.m 的代码是 -
#import "SecondViewController.h"
#import "Annotation.h"
@interface SecondViewController ()
@end
//Coordinates of Salon
#define SALON_LATITUDE -33.427528;
#define SALON_LONGITUDE 151.341697;
//Span
#define THE_SPAN 0.005f;
@implementation SecondViewController
@synthesize myMapView;
//Find my location button
-(IBAction)findmylocation:(id)sender
myMapView.showsUserLocation = YES;
myMapView.delegate = self;
[myMapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
//Set map type button
-(IBAction)setmaptype:(id)sender
switch (((UISegmentedControl *)sender).selectedSegmentIndex)
case 0:
myMapView.mapType = MKMapTypeStandard;
break;
case 1:
myMapView.mapType = MKMapTypeHybrid;
break;
case 2:
myMapView.mapType = MKMapTypeSatellite;
break;
default:
myMapView.mapType = MKMapTypeStandard;
break;
- (void)viewDidLoad
[super viewDidLoad];
//Create the region
MKCoordinateRegion myRegion;
//Center
CLLocationCoordinate2D center;
center.latitude = SALON_LATITUDE;
center.longitude = SALON_LONGITUDE;
//Span
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;
myRegion.center = center;
myRegion.span = span;
//Set our mapView
[myMapView setRegion:myRegion animated:YES];
//Annotation
//1. Create a coordinate for use with the annotation
CLLocationCoordinate2D salonLocation;
salonLocation.latitude = SALON_LATITUDE;
salonLocation.longitude = SALON_LONGITUDE;
Annotation * myAnnotation = [Annotation alloc];
myAnnotation.coordinate = salonLocation;
myAnnotation.title = @"Generic Haircuts";
myAnnotation.subtitle = @"8888 Mann St, Gosford, 2250";
[self.myMapView addAnnotation:myAnnotation];
//Automatic annotation - CUSTOM CODE
[self.myMapView selectAnnotation:myAnnotation animated:YES];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
@end
【问题讨论】:
我可以看到您发布的第二张图片,但看不到第一张。关闭自动布局后能否再次上传屏幕截图? 我刚刚重新上传了你说的图片,谢谢 我不太确定地图加载后会发生什么。您还可以发布地图视图控制器的代码吗?当自动布局打开和关闭时,IB 的屏幕截图也会有所帮助。 我在原始消息中添加了 .m 代码,我很高兴提供 IB 的屏幕截图,但我不确定它到底是什么(对不起,我对此很陌生)跨度> 哦,你能把你的 SecondViewController 从情节提要上截屏,打开和关闭自动布局吗? 【参考方案1】:尝试调用 viewDidAppear 中的 setRegion 方法,并将其从 viewDidLoad 中移除:
- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
//Create the region
MKCoordinateRegion myRegion;
//Center
CLLocationCoordinate2D center;
center.latitude = SALON_LATITUDE;
center.longitude = SALON_LONGITUDE;
//Span
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;
myRegion.center = center;
myRegion.span = span;
//Set our mapView
[self.myMapView setRegion:myRegion animated:YES];
基本上用Auto Layout,在viewDidLoad中还没有设置map view的frame:
iOS AutoLayout - get frame size width
因此 setRegion 无法正常工作。
MKMapView : setRegion doesn't work !
【讨论】:
@SeanMcQuarrie:不客气 :)。如果需要,您可以从 Dropbox 中删除您的代码。以上是关于iOS mapview 自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章