我正在尝试在TabBar顶部添加一个iAd横幅,它位于屏幕底部上方50pts处,但出于某种原因,每次刷新后横幅都会在屏幕上向上移动50pts。
我在tabBarViewController中用这种方式初始化它:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
_adBanner = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 50, 320, 50)];
_adBanner.delegate = self;
}
我把它放在这样的地方:
String.format("%04d", 1);
为什么会发生这种情况?
答案 0 :(得分:1)
您使用的代码是实现ADBannerView
的一种旧方法。您的ADBannerView
在屏幕上垂直移动的原因是由于此行banner.frame = CGRectOffset(banner.frame, 0, -banner.frame.size.height);
。每次从iAd网络收到新广告时,它会将您的ADBannerView
y位置抵消50分。我假设你bannerView:didFailToReceiveAdWithError:
中没有正确设置_bannerIsVisible
,我应该{I} _bannerIsVisible = NO
。此外,您应该在ADBannerView
而不是viewDidLoad
中创建viewDidAppear
一次,因为这很可能会在您的应用会话中被多次调用。
或者,您可以根据ADBannerView
的位置设置UITabBar
的排名。然后,当您未收到来自iAd的广告时,您可以将其设为view
动画或完全隐藏ADBannerView
。您应该根据ADBannerView
的尺寸来设置view
尺寸。现在可以使用所有不同的屏幕尺寸,以及将来可以使用的更多尺寸,以这种方式进行设置将确保在引入新设备时,ADBannerView
继续以最少的维护工作。
这是我建议的一个例子。我已经对其中的大部分内容进行了评论。如果您需要进一步澄清,请与我们联系。
#import "ViewController.h"
@import iAd; // Import iAd
@interface ViewController () <ADBannerViewDelegate> // Include delegate
// Outlet to a UITabBar I created in Interface Builder
@property (weak, nonatomic) IBOutlet UITabBar *myTabBar;
@end
@implementation ViewController {
ADBannerView *iAdBannerView;
}
-(void)viewDidLoad {
[super viewDidLoad];
iAdBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
iAdBannerView.frame = CGRectMake(0, // x = 0
self.view.frame.size.height - self.myTabBar.frame.size.height - iAdBannerView.frame.size.height,
// y = get the height of our view, subtract the height of our UITabBar, subtract the height of our ADBannerView
self.view.frame.size.width, // width = stretch our ADBannerView across the width of our view
iAdBannerView.frame.size.height); // height = height of our ADBannerView
iAdBannerView.alpha = 0.0; // Hide our ADBannerView initially because it takes a second to receive an ad
iAdBannerView.delegate = self; // Set its delegate
[self.view addSubview:iAdBannerView]; // Add it to our view
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"bannerViewDidLoadAd");
// Fade in our ADBannerView
[ADBannerView animateWithDuration:0.2
delay:0
options:0
animations:^{
iAdBannerView.alpha = 1.0;
}
completion:^(BOOL finished) {
if (finished) {
// If you wanted to do anything once the animation finishes
}
}];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"didFailToReceiveAdWithError: %@", error);
// Fade out our ADBannerView
[ADBannerView animateWithDuration:0.2
delay:0
options:0
animations:^{
iAdBannerView.alpha = 0.0;
}
completion:^(BOOL finished) {
if (finished) {
}
}];
}
您还应该熟悉这些Apple文档:ADBannerViewDelegate,CGRectOffset,viewDidAppear,frame。