首页 > 解决方案 > 每个约束项都必须是视图或布局指南

问题描述

我正在尝试在我的 UIViewController 底部添加一个 Admob 横幅:

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.safeAreaLayoutGuide.bottomAnchor,
                            attribute: .top,
                            multiplier: 1,
                            constant: 0),
         NSLayoutConstraint(item: bannerView,
                            attribute: .centerX,
                            relatedBy: .equal,
                            toItem: view,
                            attribute: .centerX,
                            multiplier: 1,
                            constant: 0)
        ])
    bannerView.load(GADRequest())
}

我调用此函数,viewDidLoad但应用程序崩溃:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“NSLayoutConstraint for >:约束项必须每个都是视图或布局指南。”

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

标签: iosadmob

解决方案


错误在第一个约束中。iOS 12 中的正确表述是:

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

这意味着 的属性必须bottom是的属性。bannerViewequalbottomview.safeAreaLayoutGuide


推荐阅读