收到/未收到广告时调整UITableView高度

时间:2014-01-27 16:52:03

标签: ios uitableview uiview admob nslayoutconstraint

我使用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

1 个答案:

答案 0 :(得分:1)

更好的方法是使用广告框架显示布局视图。在TableView和adView之间有一个约束,然后在adView和底部布局指南之间有另一个约束。将出口设置为底部约束。

然后在代码中,不是调整帧,而是适当地设置底部约束的常量属性。将其设置为0以显示广告,将其设置为-50(或您的广告名称高度)以隐藏。

[UIView animateWithDuration:1 animations:^{
    self.adViewConstraint.constant = 0;
    self.adView.hidden = NO;
}
[self.view layoutIfNeeded];

现在,您的tableView会在隐藏或显示adView时自动调整大小。