约束项都必须是视图或布局指南

时间:2019-05-14 20:32:07

标签: ios admob

我正在尝试在UIViewController的底部添加Admob Banner:

viewDidLoad

我在your_classes中调用了此函数,但应用程序崩溃并显示为:

  

由于未捕获的异常而终止应用程序   “ NSInvalidArgumentException”,原因:“ NSLayoutConstraint”   >:约束项必须分别是   查看或布局指南。'

我使用了一个官方示例https://developers.google.com/admob/ios/banner

3 个答案:

答案 0 :(得分:0)

替换

toItem: view.safeAreaLayoutGuide.bottomAnchor,

使用

toItem: view.safeAreaLayoutGuide,

toItem: view,

您指定一个锚点,但例外情况是它必须是普通视图或layoutGuide

答案 1 :(得分:0)

错误在于第一个约束。 iOS 12中的正确公式是:

NSLayoutConstraint(item: bannerView,
                   attribute: .bottom,
                   relatedBy: .equal,
                   toItem: view.safeAreaLayoutGuide,
                   attribute: .bottom,
                   multiplier: 1,
                   constant: 0)

这意味着bottom的属性bannerView必须是equal的{​​{1}}属性的bottom

答案 2 :(得分:0)

这有效:

func addBannerViewToView() {
        bannerView = GADBannerView(adSize: kGADAdSizeBanner)
        bannerView.adUnitID = "ca-app-pub-HIDDEN/HIDDEN"
        bannerView.rootViewController = self
        bannerView.delegate = self
        bannerView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(bannerView)
        view.addConstraints(
            [NSLayoutConstraint(item: bannerView,
                                attribute: .bottom,
                                relatedBy: .equal,
                                toItem: view,
                                attribute: .bottomMargin,
                                multiplier: 1,
                                constant: 0),
             NSLayoutConstraint(item: bannerView,
                                attribute: .centerX,
                                relatedBy: .equal,
                                toItem: view,
                                attribute: .centerX,
                                multiplier: 1,
                                constant: 0)
            ])
        bannerView.load(GADRequest())
    }