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

为什么我的自定义UIView无法在其父项的UIView容器中进行渲染? 所以我拥有的是:

  • MainViewController – 有一个UIViewcustomViewContainer ”(不占用整个屏幕),和
  • CustomView – 是一个具有XIB文件的UIView – 这里是UIView ,当它呈现(使用AspectFit)渲染超出父“ customViewContainer

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

“切 – 见下面Update2”

所以我不明白为什么CustomView视图的渲染面积比父customViewContainer ? 我想要的是, customview按照AspectFittypes方法完全适应父级“ customViewContainer ”。

谢谢

编辑1 (添加澄清) – 如果我“剪辑子视图”在父视图然后它然后剪辑的东西,但我真的需要在父视图区域(而不是屏幕的整个区域)呈现自定义视图。 所以我需要(a)自定义视图的中心位于父视图的中心,以及(b)将AspectFit自定义视图正确地放到父视图中。 有任何想法吗?

编辑2 – 更新

对不起 – 在原始问题中使用代码复制/粘贴错误 – 似乎无法编辑它,所以我会在下面放一个正确的版本 – 所以澄清:

MainViewController – 有一个UIViewcontainerView CustomView ”(它不占用整个屏幕),而CustomView – 是一个CustomView与XIB文件 – 这是UIView在这里,当它呈现(与AspectFit )渲染超出边界的父containerViewcontainerView

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

“所以设置框架或中心的视图,你要添加到你想要它” – 你是说我必须以编程方式/手动设置CustomView的维度是我想要的(关于父容器视图)?

我希望是有办法使用declaritive布局设置一些如何能够说“从它的XIB文件加载自定义视图,和aspectFit这个视图到self.containerView”,但是我开始怀疑如果这是可能的?

下面的更新代码(当我复制/粘贴并更改variables名称等时,在原始问题中出错)

 - (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]; } 

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

剪辑子视图

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

如果这是NO ,那么在外面绘制的子视图将会看起来好像在父级上绘制一样。