1

我在嘗試將HeyZap原生廣告調解集成到我的UICollectionView中。 我使用的是使用IB構建的單元格,但是當我嘗試將nativeAd.wrapperView分配給我自己的單元格wrapperView時,它只是不響應任何點擊或手勢。 這裏是我的代碼:UICollectionView集成中的HeyZap原生廣告

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這種方式?

感謝您的幫助!

回答

0

我是一名Heyzap的iOS工程師。讓我首先爲原生廣告集成的複雜性道歉 - 在廣告網絡之間創建一致的界面非常困難,而且由於AdMob需要包裝視圖和註冊視圖,因此它至少必須如此複雜。無論如何,這是我認爲是您的代碼中的問題:

  1. 此行:cell.wrapperView = cell.hzNativeAd.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 out your native ad reference:self.hzNativeAd = nil;
  4. 調用超:[super prepareForReuse];

對不起,這個延遲的響應。上週一是美國獨立日,所以大部分Heyzap員工都不在辦公室。

如果您有任何疑問,請告訴我;如有必要,我可以與您聊天。