UIView自动调整大小资源

20

我一直在尝试自动调整自定义UIView的大小,但是苹果方面提供了很少的资料。而且根据SO反馈,苹果的文档在某些方面实际上是错误的。最后,尽管在Interface Builder中有六个调整大小组件,在setAutoresizingMask:中也有六个调整大小组件,但它们似乎完全不相关。例如,在IB中设置宽度弹簧与将autoresizingMask设置为UIViewAutoresizingFlexibleWidth在旋转设备时具有不同的效果。

有没有好的资源可以学习iPhone上的调整大小工作原理?

编辑:

我理解苹果使用的基本概念,例如contentMode,并阅读了UIView文档。我正在寻找一些更深入地解释IB设置在SDK可编程方面提供了什么的内容。

5个回答

32
autoresizingMask 设置为 UIViewAutoresizingFlexibleWidth,等同于在 Interface Builder 中设置宽度弹簧以及左右两侧的固定距离(这些固定距离意味着边缘是不可调整的)。如果您想要复制仅设置宽度弹簧但不设置左右固定距离的行为,则需要将 autoresizingMask 设置为 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin

3
另一种表述方式是:如果是红色,那么两条内部线指定了活动的自动调整大小标志(正如您所期望的那样),但是如果是灰色,则四条外部线指定了活动的自动调整大小标志(与您所期望的相反)。 - Dustin

11

1
又一篇有用的文章.. http://www.techpaa.com/2012/05/understanding-uiview-autoresizing.html - ShivaPrasad

2

来自苹果公司:

... 使用C位运算符结合UIViewAutoresizing中描述的常量来指定此掩码的值。结合这些常量可以指定视图相对于其父视图应该增长或缩小的维度。此属性的默认值为UIViewAutoresizingNone,表示视图不应调整大小。

... 例如,假设此属性包括UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleRightMargin常量,但不包括UIViewAutoresizingFlexibleLeftMargin常量,从而表明视图左边距的宽度固定,但视图的宽度和右边距可能会更改。因此,视图似乎锚定在其父视图的左侧,而视图宽度和视图右侧的间隙都会增加。

如果自动调整行为不能提供您视图所需的精确布局,则可以使用自定义容器视图并覆盖其layoutSubviews方法以更精确地定位子视图。

因此,如果您想将一个视图定位在其父视图的顶部和右侧,您可以应用以下掩码:

[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];

1

0
记录一下,我因为单行的UILabel就是无法自动调整字体大小以适应宽度而纠结了一个小时。最终,这个方法解决了问题:
label.contentMode = UIViewContentModeScaleAspectFit;

我在谷歌上搜索了一下,似乎没有人澄清这个细节(每个人都告诉你标签应该是一行,设置adjustsFontSizeToFitWidth/minimumFontSize等)。也许这个属性的默认值已经改变了?我使用的是iOS 4.3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接