UIView自动化问题

时间:2011-03-12 23:36:37

标签: iphone objective-c uiview

我有一个像这样的视图层次结构:

UIView
  - ADBannerView
  - UIImageView
  - UILabel
  - UIButton
  - UINavigationController
    - UIView

我正在从nib文件和另一个nib的UINavigationController加载图像视图,标签和按钮。所有都有autoresizing面具设置。我正在以编程方式创建ADBannerView。

现在我的问题是,当我插入ADBannerView时,我希望图像,标签,按钮向下移动,导航控制器缩小。但是,这不会发生,而是将ADBannerView放置在图像和标签的顶部。

有人可以向我解释我在这里做错了什么吗?

2 个答案:

答案 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方法 - 用它可以很容易地在两个视图之间分割可用空间。