UIView自动化资源

时间:2010-01-24 21:34:24

标签: iphone uiview autoresize

我一直致力于自动化自定义UIView,Apple对此几乎没有什么可说的。更重要的是,基于SO反馈,Apple的文档在某些方面实际上是错误的。最后,尽管Interface Builder中有六个调整大小的组件,而setAutoresizingMask:有六个,但它们似乎根本没有关联。例如,在IB中设置宽度弹簧与在旋转设备时将autoresizingMask设置为UIViewAutoresizingFlexibleWidth具有不同的效果。

有没有什么好的资源可以帮助我们了解如何在iPhone上调整大小?

修改

我理解Apple使用的基本概念,例如contentMode,我已经阅读了UIView文档。我正在寻找一些能够更加深入地解释IB设置在程序设计方面可用的功能。

5 个答案:

答案 0 :(得分:32)

autoresizingMask设置为UIViewAutoresizingFlexibleWidth,相当于设置宽度弹簧,加上Interface Builder中的左右两个支柱(struts表示边缘灵活)。如果您想要复制仅设置宽度弹簧但不设置左右支柱的行为,则必须将autoresizingMask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin

答案 1 :(得分:11)

答案 2 :(得分:2)

来自Apple:

  

...通过组合中描述的常量来指定此掩码的值   UIView使用C按位OR运算符进行自动调整。结合这些   常量允许您指定视图的哪些维度应该增长或   相对于superview缩小。此属性的默认值   是UIViewAutoresizingNone,表示视图不应该是   根本没有调整大小。

     

...例如,   假设此属性包含UIViewAutoresizingFlexibleWidth和   UIViewAutoresizingFlexibleRightMargin常量,但不包括   UIViewAutoresizingFlexibleLeftMargin常量,因此表明   视图的左边距的宽度是固定的,但视图的宽度是   宽度和右边距可能会改变。因此,视图似乎锚定于   其超视图的左侧同时具有视图宽度和间隙   在视图右侧增加。

     

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

因此,如果您希望将视图定位到其超级视图的顶部和右侧,则可以应用以下掩码:

[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];

答案 3 :(得分:1)

superview具有 contentMode autoresizesSubviews 等参数,其子视图的 autoresizingMask 都会调整行为

认真阅读http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

答案 4 :(得分:0)

为了记录,我抓了一个小时,因为我的单线UILabel不会自动调整字体大小以适应宽度。最后,这就是诀窍:

label.contentMode = UIViewContentModeScaleAspectFit;

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