在旋转时移动MKMapView合法标签

时间:2014-04-08 19:47:33

标签: mkmapview uilabel iad

我有一个顶部带有iAd横幅的MKMapView。由于此iAd Banner涵盖了MKMapView的合法标签,因此会被移动。以下代码在viewDidLayoutSubviews中执行:

NSLog(@"ViewDidLayoutSubviews called");
UILabel *attributionLabel = [self.mapView.subviews objectAtIndex:1];
if (adBannerViewFrame.origin.y < attributionLabel.frame.origin.y) {
    NSLog(@"Banner Y coordinate: %f", adBannerViewFrame.origin.y);
    CGRect legalFrame = attributionLabel.frame;
    legalFrame.origin.y -= IAD_BANNER_HEIGHT;
    attributionLabel.frame = legalFrame;
    NSLog(@"Legal y: %f", legalFrame.origin.y);
    NSLog(@"Legal x: %f", legalFrame.origin.x);
    NSLog(@"Legal width: %f", legalFrame.size.width);
    NSLog(@"Legal height: %f", legalFrame.size.height);
}

当我从包含地图的视图控制器切换到另一个VC并再次返回时,无论方向如何,上面的代码都是完美的。但是,在不切换VC的情况下旋转设备时,合法标签在旋转时会消失,直到我再次切换回VC和第四个VC之后才会返回。 NSLogs为旋转和VC切换打印出完全相同的内容:

ViewDidLayoutSubviews called

Banner Y coordinate: 902/646(依赖于轮换)

Legal x: 882/626(依赖于轮换)

Legal y: 11

Legal width: 48

Legal height 11

尽管一切看起来都一样,标签在旋转后消失了(不确定它是否被移出视图或者它是否真的消失了)

iD Banner在ViewDidAppear中重新加载(在VC切换回第四个时调用)。但是,由于NSLogs在两种情况下打印相同,我看不出它应该如何产生任何差异。可以肯定的是,我也试图在ViewDidLayoutSubviews中重新加载iAd Banner,结果与以前没有什么不同。任何人都有类似的经历或知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对于遇到同样问题的人,我找到了解决方案。解决方法是安排一个0秒的计时器,让计时器调用执行上面代码的方法。

[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(test) userInfo:nil repeats:NO];

我认为在调用viewDIDlayoutSubviews时没有完全完成某些事情并且添加一个计时器(它不是100%准确,因此不会立即启动),允许未知的剩余内容在代码之前完成问题已经执行。