1

我正在尝试将 HeyZap Native Ads Mediation 集成到我的 UICollectionView 中。我正在使用用 IB 构建的单元格,但是当我尝试将 nativeAd.wrapperView 分配给单元格中我自己的 wrapperView 时,它只是不响应任何点击或手势。这是我的代码:

cell.hzNativeAd = ...; //Here I assign HZMediatedNativeAd to my cell property
cell.hzNativeAd.presentingViewController = self;
cell.hzNativeAd.shouldShowFacebookAdChoicesView = NO;

//Saving frame, because when I assign HeyZap wrapperView to my UIView frame is 0
CGRect wrapperViewFrame = cell.wrapperView.frame;
cell.wrapperView = cell.hzNativeAd.wrapperView;
cell.wrapperView.frame = wrapperViewFrame;

/*Assigning all labels and images
...
...
...
 */

//Registering Views with HZMediatedNativeAdViewRegisterer
[cell.hzNativeAd registerViews:^(id<HZMediatedNativeAdViewRegisterer>registerer) {
     [registerer registerTitleView:cell.titleLabel tappable:YES];
     [registerer registerBodyView:cell.descriptionLabel tappable:YES];
     [registerer registerCallToActionView:cell.actionButton];
     [registerer registerIconView:cell.imageView tappable:YES];
     [registerer registerCoverImageView:cell.coverImageView tappable:YES];

从 HeyZap 文档(https://developers.heyzap.com/docs/ios_sdk_native_mediation#step-3-show-native-ads)我可以找到如何以编程方式进行操作。但是在 iPad 上进行测试时,这样做会给我带来非常糟糕的结果。我正在创建视图,而不是添加约束,然后注册这些视图,然后在准备重用时将它们全部删除——所有这些都需要时间,而且我在 iPad 上有很多滞后。HeyZap 支持只是不回复...

所以也许有人也遇到了这个问题......或者我只是在以这种方式分配 wrapperView 时做错了什么?

感谢帮助!

4

1 回答 1

0

我是 Heyzap 的 iOS 工程师。让我首先为原生广告集成的复杂性道歉——在广告网络之间创建一致的界面真的很困难,而且由于 AdMob 需要包装视图和注册视图,它至少必须如此复杂。无论如何,这就是我认为您的代码中存在的问题:

  1. 此行:cell.wrapperView = cell.hzNativeAd.wrapperView;将无法正常工作。这只是获取单元格的wrapperView指针并更改其指向的内容,但并没有更改单元格的实际子视图——您需要在某个时刻将 Heyzap 包装器视图实际添加到视图层次结构中,以便它响应手势。这就是我可能会做的事情:

    [cell.wrapperView removeFromSuperview]; // Temporarily remove your wrapper view from the view hierarchy, since when you load a new cell from a storyboard, it'll be a subview of the `contentView` property.
    cell.hzNativeAd.wrapperView.frame = cell.wrapperView.frame;
    [cell.contentView addSubview: cell.hzNativeAd.wrapperView];
    [cell.hzNativeAd.wrapperView addSubview: cell.wrapperView];
    

(您可能希望将您的wrapperView属性重命名为其他名称以消除它与 Heyzap 的歧义)。

就目前prepareForReuse而言,您应该能够执行以下操作:

  1. 从 Heyzap 包装器视图中删除您自己的包装器视图:[self.wrapperView removeFromSuperview];
  2. 从视图层次结构中移除 Heyzap 包装器视图:[cell.hzNativeAd.wrapperView removeFromSuperview];
  3. nil出您的原生广告参考:self.hzNativeAd = nil;.
  4. 呼叫超级:[super prepareForReuse];

很抱歉对此延迟回复。上周一是美国的独立日,所以 Heyzap 的大多数员工都不在办公室。

如果您还有其他问题,请告诉我;如有必要,我可以与您进行 Skype 聊天。

于 2016-07-05T21:19:49.363 回答