【发布时间】:2013-12-16 07:49:34
【问题描述】:
我在我的 iOS 7 项目中使用自动布局,具有以下视图层次结构
主视图
-容器视图
---按钮
---按钮
---图像视图
- 横幅视图(iAd 横幅视图)
主视图和容器视图是屏幕的全宽和全高。我在容器视图上设置了水平和垂直空间约束,并保持在主视图(屏幕的高度和宽度)上。 Container View 的子视图也被限制在 20px 空间的视图按钮上。
我的问题发生在横幅视图最终被填充并放置在屏幕底部时,然后我让容器视图从其框架高度中减去横幅视图的高度,以便为横幅视图显示空间。 (下面使用的代码)理想的结果是容器视图减去高度和基于这个新高度的子视图约束更新,但最终发生的是 iAD 横幅视图只是覆盖视图,如图所示。
BannerViewDidLoadAd 代码:
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
CGRect contentFrame = self.containerView.bounds;
CGRect bannerFrame = self.bannerView.bounds;
if (self.bannerView.bannerLoaded) {
contentFrame.size.height = self.containerView.frame.size.height - self.bannerView.frame.size.height;
bannerFrame.origin.y = contentFrame.size.height;;
} else {
bannerFrame.origin.y = contentFrame.size.height;
}
[UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{
[self.containerView setFrame:contentFrame];
[self.containerView layoutIfNeeded];
self.bannerView.frame = bannerFrame;
self.bannerView.hidden = NO;
}];
[self.containerView updateConstraints];
}
iAd 覆盖容器视图及其子视图的图像
【问题讨论】:
-
使用自动布局时,千万不要直接设置框架。您需要通过修改或添加/减去约束来更改所有帧。
-
@rdelmar 所以我应该向隐藏的横幅视图添加新的约束并将容器视图底部约束编辑到新的横幅视图?谢谢,如果你能给我一个如何处理这个的例子,那就太好了! :)
-
我不确定你在做什么。横幅视图是作为子视图添加的,还是从屏幕外移入?横幅视图的高度是固定的,还是可变的?什么是预览视图(是容器视图)?
-
@rdelmar 很抱歉更新了帖子是的,预览视图是容器视图。并且 Banner View 不是 Container View 的子视图,而是兄弟视图。我以编程方式创建横幅视图,并将其作为子视图添加到主视图中,因此我将其取消隐藏并将其移动到位。横幅视图确实有一个固定的高度。
标签: ios objective-c ios7 autolayout iad