ios - 每个约束项都必须是视图或布局指南
问题描述
我正在尝试在我的 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 >:约束项必须每个都是视图或布局指南。”
解决方案
错误在第一个约束中。iOS 12 中的正确表述是:
NSLayoutConstraint(item: bannerView,
attribute: .bottom,
relatedBy: .equal,
toItem: view.safeAreaLayoutGuide,
attribute: .bottom,
multiplier: 1,
constant: 0)
这意味着 的属性必须bottom
是的属性。bannerView
equal
bottom
view.safeAreaLayoutGuide
推荐阅读
- typescript - 对函数的泛型返回类型进行比较
- reactjs - 为什么我得到以前的状态值?
- c# - SQL-Server 和 Parallel.ForEach 表创建
- android - Google Places 的获取地点响应没有位置字段
- javascript - 在特定索引处突出显示 React 中 @material-ui/core TextField 的值
- javascript - 是否可以格式化单元格中的单个字符?
- authentication - Blazor Server - 站点发布后是否可以保留相同的登录 cookie
- typescript - 我可以在不通过断言强制类型的情况下修复此打字稿编译器错误吗?
- javascript - 你能覆盖js中的String构造函数吗
- c# - System.TypeInitializationException:“'System.Management.ManagementPath' 的类型初始化程序引发了异常。”