我有一个像这样的视图层次结构:
UIView - ADBannerView - UIImageView - UILabel - UIButton - UINavigationController - UIView
我正在从nib文件和另一个nib的UINavigationController加载图像视图,标签和按钮。所有都有autoresizing面具设置。我正在以编程方式创建ADBannerView。
现在我的问题是,当我插入ADBannerView时,我希望图像,标签,按钮向下移动,导航控制器缩小。但是,这不会发生,而是将ADBannerView放置在图像和标签的顶部。
有人可以向我解释我在这里做错了什么吗?
答案 0 :(得分:3)
另一方面,当您放入ADBannerView时,要让这些内容“自动”向下移动,您需要将它们放在自己的视图中,然后更改该视图的大小和位置。假设ADBannerView的高度为50像素,您需要将UIView向下移动50像素并将其高度降低50像素。
假设self.enclosingView是用于封装图像,标签和按钮的新视图......并且假设您想要将其设置为动画(您可能会这样做,它通常看起来好多了):
// Start the AdBannerView off of the top of the screen
CGRect adFrame = self.bannerView.frame;
adFrame.origin.x = 0.0;
adFrame.origin.y = 0.0 - adFrame.size.height;
self.bannerView.frame = adFrame;
[UIView beginAnimations:@"Show Ads" context:nil];
// Animate the shrinking of the enclosing view
CGRect enclosingFrame = self.enclosingView.frame;
enclosingFrame.size.height -= self.bannerView.frame.size.height;
enclosingFrame.origin.y += self.bannerView.frame.size.height;
self.enclosingView.frame = enclosingFrame;
// Animate the motion of the bannerView into view
adFrame.origin.y = 0.0;
self.bannerView.frame = adFrame;
[UIView commitAnimations];
答案 1 :(得分:1)
自动调整遮罩定义父级帧更改的大小更改,而不是兄弟插入/删除。您必须以编程方式调整相应视图的框架。 Kenny Wyland已经告诉你如何以更少的痛苦实现这一目标。看一下CGRectDivide
方法 - 用它可以很容易地在两个视图之间分割可用空间。