为啥我的 UIView 子视图没有在父视图中呈现? (附代码)
Posted
技术标签:
【中文标题】为啥我的 UIView 子视图没有在父视图中呈现? (附代码)【英文标题】:why is my UIView subview not rendering within the parent? (code attached)为什么我的 UIView 子视图没有在父视图中呈现? (附代码) 【发布时间】:2011-07-16 04:33:39 【问题描述】:为什么我的自定义 UIView
没有在其父级的 UIView
容器中呈现?所以我有的是:
UIView
"customViewContainer
"(不占据整个屏幕),并且
CustomView - 是带有 XIB 文件的 UIView
- 这里是 UIView
,当它被渲染(使用 AspectFit)时,它会在父级“customViewContainer
”的边界之外渲染
用于设置自定义视图的代码是 MainViewController 的摘录:
>
所以我看不出为什么CustomView
视图的渲染区域比父customViewContainer
更大?我想要的是让customview
完全按照AspectFit
类型的方法适合父“customViewContainer
”。
谢谢
EDIT 1(添加说明)-如果我在父视图中“剪辑子视图”,那么它会剪辑东西,但我真正需要在父视图区域内呈现自定义视图(不是屏幕的整个区域)。所以我需要(a)自定义视图的中心位于父视图的中心,以及(b)自定义视图的 AspectFit 正确地放入父视图。有什么想法吗?
编辑 2 - 更新
抱歉 - 在原始问题中使用代码复制/粘贴错误 - 似乎无法编辑它,所以我将在下面放一个正确的版本 - 澄清一下:
MainViewController
- 有一个UIView
“containerView
”(不会占据整个屏幕),CustomView
- 是带有 XIB 文件的 UIView
- 它是 UIView
这里,当它被渲染时(使用AspectFit
)正在渲染父级“containerView
”的边界之外
现在有了下面的代码,这有意义吗?这段代码的原因是我有一个自定义的UIView
,但我有一个与之关联的 XIB 文件,所以这是让我的MainController
视图能够使用它的唯一方法。也就是说,在MainController
view
中有一个容器视图,然后以编程方式将CustomView
添加到容器视图中。
关于“因此,将要添加的视图的框架或中心设置为您想要的”-您是说我必须以编程方式/手动将 CustomView 的尺寸设置为我想要的(相对于父containerView)?
我希望有一种方法可以使用声明性布局设置来说明“从它的 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];
【问题讨论】:
【参考方案1】:检查IB文件上parent的“Clip subviews”属性是否被选中。
我认为等效代码是self.view.clipsToBounds = YES
。
如果这是NO
,则在外部绘制的子视图将如同绘制在父视图上一样可见。
【讨论】:
谢谢 - 问题是如果我“剪辑子视图”它会剪辑东西,但我真正需要在父视图区域(而不是屏幕的整个区域)内呈现自定义视图。所以我需要(a)自定义视图的中心位于父视图的中心,以及(b)自定义视图的 AspectFit 正确地放入父视图。有什么想法吗? 你能再具体一点吗?我没明白你在这里的意思。 self.view.center = self.parentView.center 应该使视图居中。对于 AspectFit,我不确定是否有内置属性。如果我没记错的话,它只适用于 UIImageView 感谢您的坚持 - 我在主要问题的 EDIT2 中更新/澄清了更多内容 是的,您必须手动将其定位到父级的中心。 “声明式”定位适用于所有四个角,但不适用于中心。使用 autoresizingMasks。对于“Aspect Fit”自定义视图,您必须手动编写代码。关于如何在此处适应 CoreGraphics 渲染视图的一些逻辑。 vocaro.com/trevor/blog/2009/10/12/… 谢谢哥们。它真的对我有帮助。但我不明白这是在做什么。剪辑是什么意思?以上是关于为啥我的 UIView 子视图没有在父视图中呈现? (附代码)的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 UIButton 没有显示在我的子视图中? iPad 应用程序
检测一个 UIView 是不是在父级中的另一个 UIView 后面