2017-12-21 23 views
1

プログラムでスクロールビュー内にAdMobバナー広告を配置しようとしています。私が持っている現在の実装(Admob docsに基づいて)は、UIビューの一番下に広告を配置し、ユーザーがスクロールするとスティッキーに保ちます。これは、scrollViewの内容をカバーするために発生しますSwiftでスクロールビューにAdMob広告を埋め込む4

私の最初の考えは広告の配置を含み、scrollview以内にそのインラインを置くのUIViewを作成することでした。ただし、新しいadViewContainerに広告を配置するために関数を使用すると、表示されません。私は、それがどのビューに追加されているかとは関係があると思う。

ここで広告を設定して、関数を呼び出してビューに追加する方法を説明します。これは正常に動作しています:

import GoogleMobileAds 

class VC: UIViewController, GADBannerViewDelegate { 

    var scrollView: UIScrollView! 
    var adViewBackground:UIView! 
    var bannerView:GADBannerView! 

    override func viewDidLoad() { 

    //configure scroll view 
    ... 

    // configure ad view container and add to scrollview 
    adViewContainer = UIView(frame: CGRect(x: 0, y: yCoord, width: view.frame.size.width, height: 50)) 
    adViewBackground.backgroundColor = UIColor.darkGray 
    view.addSubview(scrollView) 
    scrollView.addSubview(adViewContainer) 

    //configure ad and call function to add to view 
    bannerView = GADBannerView(adSize: kGADAdSizeBanner) 
    bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716" 
    bannerView.rootViewController = self 
    bannerView.delegate = self 
    bannerView.load(GADRequest()) 
    addBannerViewToView(bannerView) 
    } 
} 

この機能は以下のとおりです。 3番目と4番目の行でviewadViewContainerに変更すると、広告が表示されず、コンソールに制約に関するエラーが表示されます。ビューに制約をインストールできません。

func addBannerViewToView(_ bannerView: GADBannerView) { 
    bannerView.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(bannerView) //breaks if view changed to adViewBackground 
    view.addConstraints( 
     [NSLayoutConstraint(item: bannerView, 
          attribute: .bottom, 
          relatedBy: .equal, 
          toItem: bottomLayoutGuide, 
          attribute: .top, 
          multiplier: 1, 
          constant: 0), 
     NSLayoutConstraint(item: bannerView, 
          attribute: .centerX, 
          relatedBy: .equal, 
          toItem: view, 
          attribute: .centerX, 
          multiplier: 1, 
          constant: 0) 
     ]) 
} 

私はプログラム的制約を使用するビット新たなんだ、それを解決する最良の方法はよく分かりません。コンテナビュー内に広告を配置する代わりに、スクロールビューに直接インラインで配置するために制約を使用する方がよいでしょう。私はどんな提案にも開放的です。

答えて

0

ビューにバナーを追加する機能をいくつか変更して、問題を修正し、スクロールビュー内に埋め込みました。

具体的には、サブビューが追加されたビューを変更し、制約toItembottomLayoutGuideから広告コンテナビューに変更する必要がありました。ここで

は更新関数である。

func addBannerViewToView(_ bannerView: GADBannerView) { 
    bannerView.translatesAutoresizingMaskIntoConstraints = false 
    adViewBackground.addSubview(bannerView) //Adds it to the ad container view 
    view.addConstraints(
     [NSLayoutConstraint(item: bannerView, 
          attribute: .bottom, 
          relatedBy: .equal, 
          toItem: adViewBackground, //changed from bottomLayoutGuide 
          attribute: .bottom, //changed from top 
          multiplier: 1, 
          constant: 0), 
     NSLayoutConstraint(item: bannerView, 
          attribute: .centerX, 
          relatedBy: .equal, 
          toItem: view, 
      attribute: .centerX, 
      multiplier: 1, 
      constant: 0) 
     ]) 
} 
関連する問題