"Banner View"的帧在运行时会有所不同。iAd适用于最大的屏幕,但在较小的屏幕上为空白



我几乎已经完成了我的应用程序,唯一的问题是我的iAd横幅视图将只显示在最大的屏幕上。我已经设置了限制,这样iAd就可以很好地适应较小的屏幕,但当我在除最大屏幕之外的任何尺寸上运行它时,我看到的都是一个白框。

我目前的代码是:

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[banner setAlpha:1];
[UIView commitAnimations];
}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[banner setAlpha:0];
[UIView commitAnimations];

}

我想知道是否应该在bannerViewDidLoadAd中添加一行代码来说明帧大小。

我一直得到的错误是:

Frame for "banner view" will be different at run time.

大小在运行时为(320,50),但在画布中为(480,60)。

iAd框架已导入,添加已委派。如果有什么不同的话,它在滚动视图中。

我所有的限制都很好,只是这个框架尺寸是个问题。如果我尝试更新帧,则不会发生任何事情。

如有任何帮助,我们将不胜感激。

谢谢。

听起来您在ADBannerView上设置了尾随约束和前导约束。

您的ADBannerView将知道它在哪个设备上,并相应地设置ADBannerView的尺寸。你只需要让Auto Layout知道你想让你的广告在哪里。例如,如果你想让ADBannerView在你的视图的底部,那么你可以用Bottom Space to: Bottom Layout Guide将它固定在视图的底部并与Align Center X to: Superview对齐。

另外,不要使用beginAnimations:context:方法。来自UIView类参考:

iOS 4.0及更高版本不鼓励使用此方法。你应该使用基于块的动画方法来指定动画。

使用基于块的动画,您的代理方法最终会如下所示:

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    [UIView animateWithDuration:1.0 animations:^{
        banner.alpha = 1.0;
    }];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    [UIView animateWithDuration:1.0 animations:^{
        banner.alpha = 0.0;
    }];
}

最新更新