实施 Inneractive / Inneractive 横幅广告 - 广告定位问题

Implementing Inneractive / Inneractive banner ads - ad positioning issue

我想在我的应用程序中使用 Inneractive Ad SDK 5+,我想将广告放在底部。在我尝试过的每一种情况下,它都将始终位于屏幕中间,水平和垂直居中。

代码:

self.myAdView = [[IaAdView alloc]    
initWithAppId:@"MyAppID_iPhone" adType:IaAdType_Banner delegate:self];

self.myAdView.adConfig.refreshIntervalInSec = 30;

[[InneractiveAdSDK sharedInstance] loadAd:self.myAdView];

委托方法:

- (void)InneractiveAdLoaded:(IaAd *)adView {
    NSLog(@"AD LOADED METHOD CALLED");

    // Here I tried many things I found online without any effect
    [self.view addSubview:self.myAdView];
}

这里是我如何在 viewcontroller.m 文件的顶部实现 属性:

@interface ViewController () <InneractiveAdDelegate>

@property (nonatomic, retain) IaAdView* myAdView;
@end

@implementation ViewController
@synthesize myAdView = _myAdView;

我敢肯定这一定是一件小事,但我想不通。我找到了许多包含 initWithFrame 的解决方案,但这在这种情况下不可用。

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

更新 1:

我试过:

- (void)InneractiveAdLoaded:(IaAd *)adView {
    NSLog(@"AD LOADED METHOD CALLED");
    self.myAdView.frame=CGRectMake(x,y,width,height); // With any number and random number

    self.myAdView.frame=CGRectOffset(self.myAdView.frame, 0, yOffset); // With any number and random number
    [self.view addSubview:self.myAdView];
}

没有任何帮助。广告保持绝对居中。我开始认为设置有问题,但除了定位之外,一切正常。见下图。

更新二:

尝试了以下但没有成功。 ios8 在屏幕中央显示横幅,并且 ios7 由于某种原因在添加该行后根本不显示。

- (void)InneractiveAdLoaded:(IaAd *)adView {

     NSLog(@"AD LOADED METHOD CALLED");
    self.myAdView.frame = CGRectMake(0, self.view.frame.size.height -     self.myAdView.frame.size.height , self.view.frame.size.width,    self.myAdView.frame.size.height);

    [self.view addSubview:self.myAdView];

}

试试这样设置它的框架:

self.myAdView.frame=CGRectMake(x,y,width,height);

其中 x,y,width,height 是您想要的位置和大小。

或者如果它已经通过 X 坐标、宽度和高度很好地定位,您可以使用:

self.myAdView.frame=CGRectOffset(self.myAdView.frame, 0, yOffset);

其中 yOffset 是您希望它在该坐标上移动的量。请务必使用 self.view.frame 而不是确切数字来计算它,因此它在每台设备的底部。

要将横幅放置在 UIView 的底部,您需要更改其 frame

self.myAdView.frame = CGRectMake(x, y, width, height);

self.myAdView.frame = CGRectMake(0, self.view.frame.size.height - self.myAdView.frame.size.height , self.view.frame.size.width, self.myAdView.frame.size.height);
  • x - 设置为 0
  • 的原点
  • y - 将原点设置为 UIView 的高度。但这将使它出现在屏幕底部之外。因此,我们必须减去 self.myAdView 的高度以将其向上移动到屏幕上:self.view.frame.size.height - self.myAdView.frame.size.height
  • width - 将其设置为 UIView 的宽度:self.view.frame.size.width
  • height - 将其设置为我们 self.myAdView 的高度:self.myAdView.frame.size.height

这是一个可行的解决方案: 您在这里有两个选择 -

  1. 将您的 adView 包装在外部 UIView 中,然后您就拥有了完全控制权
  2. 在 'InneractiveAdLoaded:' 事件中更新 adView 的框架

无论如何:在调用 'loadAd:' SDK 方法之前,必须将 adView 添加到它的 superView。

如果您有任何问题,请告诉我。

更新: 选项 2:

#import "ViewController.h"
#import "InneractiveAdSDK.h"

@interface ViewController () <InneractiveAdDelegate>

@property (nonatomic, strong) IaAdView *adView;

@end

@implementation ViewController {}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.adView = [[IaAdView alloc] initWithAppId:@"<Your ad unit ID>" adType:IaAdType_Banner delegate:self];

    [self.view addSubview:self.adView];
    [[InneractiveAdSDK sharedInstance] loadAd:self.adView];
}

- (void)positionAd {
    const CGFloat x = (self.view.bounds.size.width - self.adView.frame.size.width) / 2.0f;
    const CGFloat y = self.view.bounds.size.height - self.adView.frame.size.height;

    self.adView.frame = CGRectMake(x, y, self.adView.frame.size.width, self.adView.frame.size.height);
}

#pragma mark - InneractiveAdDelegate

- (void)InneractiveAdLoaded:(IaAd *)adView {
    [self positionAd];
}

- (void)InneractiveDefaultAdLoaded:(IaAd *)adView {
    [self positionAd];
}

- (UIViewController *)viewControllerForPresentingModalView { return self; }

@end