我正在尝试获取ADBannerView的渲染宽度,但它似乎总是与我的UIScreen的主屏幕的宽度相同:
adBannerView = [[ADBannerView alloc] init];
[self.navController.view addSubview:adBannerView];
NSLog(@"Banner's width: %f.", adBannerView.frame.size.width);
NSLog(@"Screen's width: %f.", [UIScreen mainScreen].bounds.size.width);
上面的两个日志显示相同的值。我想最终使用以下代码将横幅水平居中,但我从横幅框架中返回的宽度必须是渲染宽度:
adBannerView.frame = CGRectOffset(adBannerView.frame, ([UIScreen mainScreen].bounds.size.width - adBannerView.frame.size.width)/2.0f, 0);
那么如何获取 ADBannerView 的渲染宽度呢?
您可以将这些大小用于横幅视图:
extern NSString * const ADBannerContentSizeIdentifier320x50;
extern NSString * const ADBannerContentSizeIdentifier480x32;
extern NSString * const ADBannerContentSizeIdentifierPortrait;
extern NSString * const ADBannerContentSizeIdentifierLandscape;
但还有另一个范围:
要调整横幅视图的大小,请使用大小适合:在横幅视图上, 指定包含横幅视图的视图的边界。 使用返回的大小调整横幅视图的大小。横幅视图将是 调整为当前设备的正确宽度和高度,以及 取向。以下代码片段显示了可能的 实现:
ADBannerView *myBannerView = <#Get a banner view#>;
UIView *myContainingView = <#Get the containing view#>;
NSSize newBannerSize = [myBannerView sizeThatFits:myContainingView];
[myBannerView setBounds:newBannerSize];
如果您只想将横幅视图居中:
adBannerView.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width - adBannerView.frame.size.width)/2,adBannerView.frame.origin.y,adBannerView.frame.size.width,adBannerView.frame.size.height);
我希望它有所帮助。
有关 ADBannerView 的文档可在此处获得。
只是想分享一个对我有用的解决方案。看起来我所有的问题都是由于我使用了Cocos2D。我不应该用[UIScreen mainScreen].bounds.size.width
.以下是对我有用的方法,最后,将来自我的应用程序委托的广告居中(它继承了 CCAppDelegate,所以就像我试图混合搭配两种不同的界面大小调整方法):
adBannerView = [[ADBannerView alloc] init];
adBannerView.backgroundColor = [UIColor whiteColor];
CGSize sizeToFit = [adBannerView sizeThatFits:[[CCDirector sharedDirector] view].frame.size];
// It is assumed that sizeThatFits returns size with a width smaller than the director's width, so just see if it needs to be centered.
[adBannerView setFrame:CGRectMake(([[CCDirector sharedDirector] view].frame.size.width - sizeToFit.width)/2.0f, 0, sizeToFit.width, sizeToFit.height)];
adBannerView.delegate = self;
[self.navController.view addSubview:adBannerView];