“横幅视图”的框架在运行时将有所不同。 iAd适用于最大屏幕,但较小屏幕上空白

时间:2015-12-07 11:28:58

标签: ios frame iad adbannerview

我差不多完成了我的应用程序,我唯一的问题是我的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框架并添加了委托。 如果这有任何区别,它就在滚动视图中。

我所有的约束都很好,只是这个框架尺寸才是问题所在。如果我试图更新帧没有任何反应。

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

听起来你的ADBannerView设置了尾随和领先约束。

您的ADBannerView会知道它所在的设备,并相应地设置ADBannerView的尺寸。您应该让自动布局知道您希望广告的位置。例如,如果您希望ADBannerView位于视图的底部,则可以使用Bottom Space to: Bottom Layout Guide将其固定到视图的底部,并将其与Align Center X to: Superview对齐。

另外,请勿使用beginAnimations:context:方法。来自UIView Class Reference

  

在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;
    }];
}