我使用Admob作为广告提供商。我有一个UIViewController
,其中UITableView
在故事板中设置,以使用控制器的整个宽度和高度。
收到广告时会发生以下情况:
- (void)adViewDidReceiveAd:(GADBannerView *)Adview {
if (bannerView_.hidden) {
bannerView_.hidden = NO;
}
[UIView animateWithDuration:1.0 animations:^ {
// Final frame of ad should be docked to bottom of screen
Adview.frame = CGRectMake(0.0,
self.view.frame.size.height -
Adview.frame.size.height,
Adview.frame.size.width,
Adview.frame.size.height);
}];
这会更新Adview的框架并使其显示在屏幕底部,按预期工作。
我遇到的问题是UITableView
框架。如果我以相同的方法更新帧,它似乎再次更新我相信从故事板中的表视图的先前设置的约束。
更改UITableView
的约束/框架的正确方法是什么,以便在收到广告时,相关更改适用。
收到 - -(void)adView:(GADBannerView *)Adview didFailToReceiveAdWithError:(GADRequestError *)error {
失败 - - (void)adViewDidReceiveAd:(GADBannerView *)Adview
答案 0 :(得分:1)
更好的方法是使用广告框架显示布局视图。在TableView和adView之间有一个约束,然后在adView和底部布局指南之间有另一个约束。将出口设置为底部约束。
然后在代码中,不是调整帧,而是适当地设置底部约束的常量属性。将其设置为0以显示广告,将其设置为-50(或您的广告名称高度)以隐藏。
[UIView animateWithDuration:1 animations:^{
self.adViewConstraint.constant = 0;
self.adView.hidden = NO;
}
[self.view layoutIfNeeded];
现在,您的tableView会在隐藏或显示adView时自动调整大小。