2010-01-23 33 views
2

我一直在寻找调整大小的背景信息,但我一直没有找到太多。我知道我需要在子视图上设置autoresizesSubviews,在子视图上设置autoresizingMaskUIView子类不会自动调整大小

我已经这样做了,我的UIImageViews正确调整大小,但我的自定义UIView子类没有。

为的UIImageView的代码:

UIImageView *newX = [[[UIImageView alloc] initWithImage:dot] autorelease]; 
[newX setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
[newX setFrame:CGRectMake(0, 0, self.view.bounds.size.width, 1)]; 
[self.view addSubview:newX]; 

自定义UIView子类代码:

trace = [[TraceView alloc] initWithFrame:self.view.bounds]; 
[trace setAutoresizingMask:(UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin)]; 
[self.view addSubview:trace]; 

从我所知道的,视图旋转如预期,但不会调整。我再也看不到它的底部了,它并没有将屏幕填充到右侧。 我是否需要向UIView子类添加任何内容以使调整大小正常工作?

编辑: 我已经改变了autoresizingMake到(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)并呼吁[subview setNeedsDisplay];我不知道为什么这是必要的,因为没有的UIImageViews它做工精细,但它现在的行为预期。

回答

4

我认为你错过了UIViewAutoresizingFlexibleHeight或子视图的宽度。否则,我认为该观点只是根据利润率而移动,但不会调整。

+0

Apple的文档说UIViewAutoresizingFlexibleBottomMargin会导致“通过扩展或缩小左边距的方向来调整视图大小。”这是我想要的。我不想让视图伸展。此外,即使我使用FlexibleWidth/Height,它也不会达到人们所期望的效果。虽然它调整大小,但只要我在子视图上调用'setNeedsDisplayInRect:',它就会撤销调整大小,并且从此开始调整大小不正确。它重复调整大小/取消调整大小,但使用这种新的形状并不能满足超级视图的需要。 – 2010-01-23 20:52:14

+0

然后苹果文档谎言。没有FlexibleHeight/Width选项,您不会进行任何拉伸。 顺便说一句,在一个名为“开始iPhone开发项目”的档案中有一些示例代码,你可以从http://iphonedevbook.com/forum/viewforum.php?f=54得到你可以构建和混淆得到更好地理解所有这些自动化的东西是如何工作的。这些项目被称为“05 Autoresize 1”和“05 Autoresize 2”。我发现调整大小的模型有点令人困惑,如果不玩这些选项就不会真正理解它。 – Nimrod 2010-01-24 15:46:42

+1

感谢您的指点,我已经搞砸了一点,我开始了解它,但是IB和这样做的程序化方式似乎并没有很好地映射到彼此。猜猜该是另一个问题了。 – 2010-01-24 19:34:56

0

你提到了旋转。包含您的自定义视图的超级视图是否实际调整大小?如果有疑问,请将其背景设置为某种奇怪的颜色。如果在方向改变后它没有正确调整大小,那么你应该在右边看到一个白色或灰色的条。

+0

是的,它旋转和调整大小就好了。 – 2010-01-24 05:34:26