我有一个顶部带有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,结果与以前没有什么不同。任何人都有类似的经历或知道如何解决这个问题?
答案 0 :(得分:0)
对于遇到同样问题的人,我找到了解决方案。解决方法是安排一个0秒的计时器,让计时器调用执行上面代码的方法。
[NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(test) userInfo:nil repeats:NO];
我认为在调用viewDIDlayoutSubviews
时没有完全完成某些事情并且添加一个计时器(它不是100%准确,因此不会立即启动),允许未知的剩余内容在代码之前完成问题已经执行。