Skip to main content

SwiftUIでAdmobの広告表示時にpaddingを設定する

SwiftUI Cook Book

SwiftUIを本格的に導入始めたマスタカです
今回はadmobを使ってみた


・基本的なやり方
これに沿ってやれば基本的に動く
UIKit経由だとこうやってラップしないといけないんだね
https://qiita.com/hyuga_amazia/items/d8b39b4292bfccb853ef

 

・エミューレーターで動かす

func makeUIViewController(context: Context) -> some UIViewController {
    let bannerViewController = BannerViewController()
    bannerView.adUnitID = adUnitID
    bannerView.rootViewController = bannerViewController
    bannerViewController.view.addSubview(bannerView)
    bannerViewController.delegate = context.coordinator
    
#if DEBUG
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [GADSimulatorID]
#endif
    
    
    return bannerViewController
}

 

・Admob表示時にpaddingを入れる
表示時に位置を変える等やるならこのようにやる
ちなみにhideするとそもそもローディング処理が走らないっていうバグにハマるので注意

struct BannerView: UIViewControllerRepresentable {
    @Binding var isAd: Bool
    @Binding var adHeight: CGFloat

    // MARK: - GADBannerViewDelegate
    func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
        self.parent.adHeight = bannerView.adSize.size.height
        self.parent.isAd = true
    }
    
    func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
        self.parent.isAd = false
    }
}
struct Ad: View {
    @State var isAd = false
    @State var height:CGFloat = 0.0
    var body: some View {
        let  bottom = isAd ? height : 0
        BannerView(isAd: $isAd, adHeight: $height)
            .padding(.bottom, CGFloat(bottom))
    }
}

 

SwiftUI Cook Book

関連記事:

Pocket