【问题标题】:iAd is not positioned correctlyiAd 未正确定位
【发布时间】:2015-02-11 14:16:49
【问题描述】:

我正在使用 SpriteKit 开发一款游戏,我想实现 iAd。在我的应用程序启动后,横幅看起来很好,只是它覆盖了我的视图,如此处所示http://i.imgur.com/O9Gc6o6.png

在我将 iPhone 的方向更改为横向后,横幅消失了。当我将方向更改回纵向时它再次出现,但它的位置发生了变化:http://i.imgur.com/K3AqGl4.png

从此时起,横幅在方向更改为横向后可见,但也会发生移动。

这是我来自 UIViewController 的代码:

self.canDisplayBannerAds = true
adBanner = ADBannerView(frame: CGRect.zeroRect)
adBanner.delegate = self
adBanner.hidden = true
adBanner.frame.origin = CGPointMake(0.0, self.view.bounds.size.height - adBanner.frame.size.height)
self.view.addSubview(adBanner)

真正奇怪的是,这种位置转换只发生在我的 iPhone 上。在模拟器中测试它 - 没有问题。 Buddy 在他的 iPhone 上进行了测试 - 没问题。不过,开始时覆盖视图仍然发生。

发生了什么事?我没主意了。在过去的几个小时里,我试图在谷歌上找到它,但没有成功。提前致谢。

【问题讨论】:

  • 首先,您是否在视图中使用自动布局?如果是这样,您希望使用自动布局约束来放置广告横幅,而不是简单地设置它的框架。
  • 关于它的重叠,您将它放置在现有视图的顶部。为了防止重叠,您需要将视图的高度减少横幅的高度,然后将横幅放置在视图的底部。
  • 哦。我的。上帝。我为什么不早点尝试呢?使用故事板放置 iAd 横幅并使用 IBOutlet 连接到代码后,一切正常。谢谢!!!顺便说一句,我仍然不明白为什么问题只出现在我的手机上......奇怪......

标签: ios swift sprite-kit iad


【解决方案1】:

iOS 9.2.1,Xcode 7.2.1,启用 ARC

在 iPhone 设置中检查 iAd 的开发者设置。

根据我的经验,问题出在self.canDisplayBannerAds = true,然后在没有正确按摩的情况下更改了广告横幅的框架,这就是您遇到麻烦的地方。

在所有 Apple 示例中,他们从未设置此属性,您可以自己查看:

https://developer.apple.com/library/ios/samplecode/iAdSuite_Storyboard/Listings/BasicBanner_BasicBanner_TextViewController_m.html#//apple_ref/doc/uid/DTS40013458-BasicBanner_BasicBanner_TextViewController_m-DontLinkElementID_6

我在为广告加载动画时遇到此问题,以便在广告加载后引发,或类似的行为。我觉得跟这个有很大关系……

为确保广告正确显示,横幅视图 必须始终调整大小以匹配内置广告大小之一。 ADBannerView 类通过阻止您更改来强制执行此操作 直接画框。相反,您可以通过以下方式更改横幅视图的框架 设置 currentContentSizeIdentifier 属性。 更改值 存储在此属性中,将横幅视图的框架调整为匹配的大小 提供的标识符的大小。在你可以设置一个特定的 尺寸标识符,尺寸标识符也必须包含在集合中 requiredContentSizeIdentifiers 中包含的大小标识符 属性。

如果您好奇,本文的其余部分在这里:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/iAd_Guide/BannerAdvertisements/BannerAdvertisements.html#//apple_ref/doc/uid/TP40009881-CH3-SW2

从我一开始链接的 Apple“基本横幅”示例中,他们通过首先访问广告横幅的 sizeThatFits 属性来玩弄横幅框架:

// all we need to do is ask the banner for a size that fits into the layout area we are using
CGSize sizeForBanner = [self.bannerView sizeThatFits:contentFrame.size];

一旦设置了self.canDisplayBannerAds,就会发生以下情况:

取自 UIViewController(iAdAdditions)

...当视图控制器启用横幅广告时,系统会将视图 控制器的内容视图在系统的新内容视图中 管理。这允许系统动态调整原始大小 显示横幅广告时的内容视图,以及管理 横幅广告本身的展示。该属性提供访问 原始内容视图,而不是管理的包含视图 横幅广告展示。

如果没有为视图控制器启用横幅广告显示,则此 属性返回内容视图。

如果启用了横幅广告显示,然后又禁用了视图 控制器,系统管理的内容视图不会被删除。

希望这会有所帮助。干杯!

【讨论】:

  • 嘿,感谢您的回复,但不确定您是否注意到 - 我在一年前发布了这个问题 :) 现在不处理广告,但如果我再次遇到这个问题,我会知道在哪里看!
  • 是的,我做到了,我自己也在寻找一些答案,最后花了几天时间尝试不同的解决方案,决定在这里发布我的发现以节省其他人的时间。好问题!希望你觉得我的回答至少很有趣。
猜你喜欢
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多