为什么我的UIView子视图不在父级内呈现? (附代码)
为什么我的自定义UIView
无法在其父项的UIView
容器中进行渲染? 所以我拥有的是:
- MainViewController – 有一个
UIView
“customViewContainer
”(不占用整个屏幕),和 - CustomView – 是一个具有XIB文件的
UIView
– 这里是UIView
,当它呈现(使用AspectFit)渲染超出父“customViewContainer
”
用于设置自定义视图的代码是MainViewController的这个提取:
“切 – 见下面Update2”
所以我不明白为什么CustomView
视图的渲染面积比父customViewContainer
? 我想要的是, customview
按照AspectFit
types方法完全适应父级“ customViewContainer
”。
谢谢
编辑1 (添加澄清) – 如果我“剪辑子视图”在父视图然后它然后剪辑的东西,但我真的需要在父视图区域(而不是屏幕的整个区域)呈现自定义视图。 所以我需要(a)自定义视图的中心位于父视图的中心,以及(b)将AspectFit自定义视图正确地放到父视图中。 有任何想法吗?
编辑2 – 更新
对不起 – 在原始问题中使用代码复制/粘贴错误 – 似乎无法编辑它,所以我会在下面放一个正确的版本 – 所以澄清:
MainViewController
– 有一个UIView
“ containerView
CustomView
”(它不占用整个屏幕),而CustomView
– 是一个CustomView
与XIB文件 – 这是UIView
在这里,当它呈现(与AspectFit
)渲染超出边界的父containerView
“ containerView
”
下面的代码现在有意义吗? 这段代码的原因是我有一个自定义的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
,那么在外面绘制的子视图将会看起来好像在父级上绘制一样。