2010-08-17 52 views
3

在包含多个子视图的视图中,其中一个子视图应保持距离超级视图顶部和底部的固定的非零距离。在这些图像中,该视图被示出为灰色:用于固定边距尺寸的自动确认边框

Portait

Landscape

根据文档,该视图应具有UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth的掩模。但是,这导致视图扩大其高度来接管整个超视图。如何将观点限制在固定但非零的边际?谢谢。

+0

快问题,宽度调整大小的工作? – 2010-08-17 18:47:06

+0

是的。只有高度是有问题的。 – 2010-08-17 19:23:03

+0

在超级视图上设置了什么是autoresizing mask?另外,你是在IB还是在代码中设置掩码? – 2010-08-17 19:55:46

回答

2

UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth应该工作。但是,当父视图的高度/宽度变小(并且当它变为零时所有内容都会中断)时,UIView自动调整大小存在一个错误。—它可能就是UIView的高度/宽度不能变为负数。

我在做initWithFrame时遇到过这个问题:CGRectZero;如果您在self.bounds为CGRectZero(或以其他方式)时使用类似subview.frame = self.bounds的内容,也可能会发生这种情况。

我的蛮力调试方法将重写setFrame:和setBounds:添加NSLog。

+0

感谢您的建议。奇怪的是,如果我用UIView上的setBounds创建一个类别,并调用super,我会得到“ - [UIView setBounds:]:无法识别的选择器”。任何想法为什么会这样? – 2010-08-25 17:17:38

+0

因为一个类别不是一个子类。男孩,那是密集的。 – 2010-08-25 18:06:21

+0

对于类别中的“base-calling”,请参阅http://stackoverflow.com/questions/3487828/if-i-override-a-class-method-is-there-a-way-i-can-call-所述-原始方法-的/ 3490215#3490215 – 2010-09-02 12:45:12