我正在展示这样的 iAD 横幅:
override func viewDidLoad() {
...
initializeBannerAd()
}
func initializeBannerAd() {
let banner = ADBannerView(adType: ADAdType.Banner)
banner.frame = CGRectMake(0,-100, self.view.frame.width, 100)
banner.delegate = self
banner.hidden = true
self.view.addSubview(banner)
}
func bannerViewDidLoadAd(banner: ADBannerView!) {
banner.hidden = false
banner.frame = CGRectMake(0, self.view.frame.size.height-100, self.view.frame.width, 100)
banner.setTranslatesAutoresizingMaskIntoConstraints(false)
let viewsDictionary = ["banner":banner]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[banner]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[banner]-0-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary))
self.view.layoutIfNeeded()
}
我的问题:
- 第一个横幅完美加载并紧贴屏幕底部
- 每当横幅更新时,它会跳起来并停留在那里,直到我点击 View 上的任意位置,然后它会移回底部
我该如何解决这个问题?为什么只有在我点击后才应用约束?
最佳答案
在单个 UIViewController 底部添加广告横幅的最简单方法是将其属性 var canDisplayBannerAds: Bool
设置为 true。这将触发自动横幅展示,无需您自己实例化和添加横幅。
关于您的代码,您第一次看到横幅时,您在 bannerViewDidLoadAd
中添加的自动布局约束尚未添加。然后每次加载新横幅时都会一次又一次地添加它们。您最好在 viewDidLoad
中一劳永逸地添加约束(以防这是您打算呈现横幅的方式)。由于 ADBannerView
定义了固有的内容大小,因此您不需要在代码中强制横幅大小。只需添加自动布局规则。
如果您需要示例,here您可以找到我前段时间针对类似问题所做的一个。在示例中,我使用了一个 ADBannerView
单例并将其显示在 viewController View 的底部或顶部。
希望对您有所帮助。
关于ios - 仅在点击后才应用 swift 的自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29007457/