为什么我的UIView子视图不在父级内呈现? (附代码)

时间:2011-07-16 04:33:40

标签: iphone ios uiview uiviewcontroller addsubview

为什么我的自定义UIView无法在其父级的UIView容器中呈现?所以我拥有的是:

  • MainViewController - 有一个UIViewcustomViewContainer”(不占用整个屏幕),
  • CustomView - 是一个带有XIB文件的UIView - 这里是UIView,当它呈现时(使用AspectFit)呈现在父“customViewContainer”的边界之外

用于设置自定义视图的代码是MainViewController的摘录:

<< cut - 请参阅下面的Update2>>

所以我看不出为什么CustomView视图的呈现区域比父customViewContainer更大?我想要的是customview完全符合customViewContainer类型方法的父“AspectFit”。

感谢

编辑1 (补充说明) - 如果我在父视图中“剪辑子视图”然后它会剪切内容,但我真正需要在父视图区域内渲染自定义视图(不是整个屏幕区域)。所以我需要(a)自定义视图的中心位于父视图的中心,以及(b)正确地将AspectFit视图放入父视图中。有什么想法吗?

编辑2 - 更新

抱歉 - 原始问题中的代码复制/粘贴错误 - 似乎无法编辑它所以我会在下面放置正确的版本 - 所以澄清一下:

MainViewController - 有UIViewcontainerView”(不占用整个屏幕),而CustomView - 是UIView一个XIB文件 - 这里是UIView,当它被呈现时(使用AspectFit)呈现在父“containerView”的边界之外

使用下面的代码,这现在有意义吗?这段代码的原因是我有一个自定义UIView,但我有一个与之关联的XIB文件,所以这是让MainController视图能够使用它的唯一方法。也就是说,在MainController view中有一个容器视图,然后以编程方式将CustomView添加到容器视图中。

重新“所以设置你要添加的视图的框架或中心是你想要的” - 你是说我必须以编程方式/手动设置CustomView的尺寸是我想要的(相对于父容器View)?

我希望有一种方法可以使用声明布局设置来说明如何能够说“从它的XIB文件加载自定义视图,以及将此视图加载到self.containerView中的aspectFit”,但是我是开始怀疑这是否可能?

以下更新的代码(当我复制/粘贴并更改变量名称等原始问题时出错)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Load the custom Altimeter View into this UIControllerView's container UIView for it
    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"Customview" owner:self options:nil];
    for (NSObject *obj in nibs) {
        if ( [obj isKindOfClass:[Customview class]]) {
            Customview *cv = (Customview*)obj;
            [self.containerView addSubview:cv];
            break;
        }
    }
    // UI Layout
    self.containerView.layer.borderWidth = 2;
    self.containerView.layer.borderColor = [[UIColor redColor] CGColor];
}

1 个答案:

答案 0 :(得分:24)

检查IB文件中父级的“剪辑子视图”属性是否已被选中。

Clip Subviews

我认为等效代码是self.view.clipsToBounds = YES

如果这是NO,则在外部绘制的子视图将被显示,就好像它是在父项上绘制的一样。