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

Gre*_*reg 17 iphone uiviewcontroller uiview addsubview ios

为什么我的自定义UIView不在UIView其父容器的容器内呈现?所以我拥有的是:

  • MainViewController - 有一个UIView" customViewContainer"(它不占用整个屏幕),和
  • CustomView - 是一个UIView带有XIB文件的 - 它在UIView这里呈现时(使用AspectFit)呈现在父" customViewContainer" 的范围之外

用于设置自定义视图的代码是MainViewController的提取:

"切 - 见下面的Update2"

所以我不明白为什么CustomView视图以比父母更大的面积呈现customViewContainer?我想要的是完全按照类型方法customview适合父母" customViewContainer" AspectFit.

谢谢

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

编辑2 - 更新

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

MainViewController- 有一个UIView" containerView"(它不占用整个屏幕),并且CustomView- 是一个UIView带有XIB文件 - 它在UIView这里被渲染(带AspectFit)渲染超出了父" containerView" 的界限

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

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

我希望有一种方法可以使用声明布局设置来说明如何能够说"从它的XIB文件加载自定义视图,并将aspectFit这个视图放入self.containerView",但是我开始怀疑如果可以的话?

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

- (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];
}
Run Code Online (Sandbox Code Playgroud)

Mug*_*nth 24

检查是否选中了IB文件上parent的"Clip subviews"属性.

剪辑子视图

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

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