使用标准的 UINavigationController 根应用程序是否可以在屏幕底部、 View 层次结构下方显示单个 ADBannerView?也就是说,在不修改每个可以推送到根 UINavigationController 的 View Controller / View 的情况下,我可以让全局 ADBannerView 可见吗?
我不确定如何在 IB 或代码中进行设置。帮忙?
我看到类似的问题,但答案很模糊。我正在寻找一个具体的例子。
最佳答案
编辑:在 iOS5+ 中执行此操作的更好方法可能是使用 View Controller 包含。也就是说,创建一个包含广告和应用程序 Controller (导航、标签等)的根 Controller 。
我想出了一个方法来做到这一点。这是我所做的:
在我的第一次尝试中,我创建了一个名为 AdBannerController 的新 View Controller 。对于其 View ,我创建了一个全屏 View 和两个 subview 。第一个 subview (contentView) 用于常规内容,第二个 subview 是 AdBannerView。我使用此 View Controller 的实例作为与应用程序窗口关联的 View Controller ( [window addSubview: adBannerController.view] )。然后我将 UINavigationController.view 添加为 adBannerController.view 的 subview :[adBannerController.contentView addSubview:navigationController.view]。
除了推送到 UINavigationController 的 View Controller 从未调用其 will/did-load/unload 方法之外,这大部分都有效。嘘。我在一些地方读到,这是 UINavigationController View 不是应用程序窗口的直接后代的症状。
在第二次尝试中,我采用了相同的 AdBannerController 并从 UINavigationController 派生它。这次,我在loadView中做了以下操作:
- (void)loadView
{
[super loadView];
_contentView = [self.view retain];
self.view = [[[UIView alloc] initWithFrame: _contentView.frame] autorelease];
[self.view addSubview: _contentView];
_adView = [[ADBannerView alloc] initWithFrame: CGRectMake(0, _contentView.bounds.size.height, 320, 50)];
_adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
_adView.delegate = self;
[self.view addSubview: _adView];
/* for visual debugging of view layout
[[_mainView layer] setCornerRadius: 6.0];
[[_mainView layer] setMasksToBounds: YES];
[[_mainView layer] setBorderWidth: 1.5];
[[_mainView layer] setBorderColor: [[UIColor grayColor] CGColor]];
*/
}
注意发生了什么 - 我让父类(super class) UINavigationController 构造其常规“内容” View ,但我将其交换并用我自己的 View 替换,该 View 是内容和广告 View 的容器。
这个效果非常好。我也在使用 Three20,需要做一些事情才能使其与该设置一起工作,但还不错。
我希望这对某人有帮助!
关于iphone - iPhone 应用程序中的全局 ADBannerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669272/