我一直致力于自动化自定义UIView,Apple对此几乎没有什么可说的。更重要的是,基于SO反馈,Apple的文档在某些方面实际上是错误的。最后,尽管Interface Builder中有六个调整大小的组件,而setAutoresizingMask:
有六个,但它们似乎根本没有关联。例如,在IB中设置宽度弹簧与在旋转设备时将autoresizingMask
设置为UIViewAutoresizingFlexibleWidth
具有不同的效果。
有没有什么好的资源可以帮助我们了解如何在iPhone上调整大小?
修改
我理解Apple使用的基本概念,例如contentMode,我已经阅读了UIView文档。我正在寻找一些能够更加深入地解释IB设置在程序设计方面可用的功能。
答案 0 :(得分:32)
将autoresizingMask
设置为UIViewAutoresizingFlexibleWidth
,相当于设置宽度弹簧,加上Interface Builder中的左右两个支柱(struts表示边缘不灵活)。如果您想要复制仅设置宽度弹簧但不设置左右支柱的行为,则必须将autoresizingMask
设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin
答案 1 :(得分:11)
我发现这篇文章有助于理解iOS自动调整。
http://www.techotopia.com/index.php/IOS_4_iPhone_Rotation,_View_Resizing_and_Layout_Handling
答案 2 :(得分:2)
来自Apple:
...通过组合中描述的常量来指定此掩码的值 UIView使用C按位OR运算符进行自动调整。结合这些 常量允许您指定视图的哪些维度应该增长或 相对于superview缩小。此属性的默认值 是UIViewAutoresizingNone,表示视图不应该是 根本没有调整大小。
...例如, 假设此属性包含UIViewAutoresizingFlexibleWidth和 UIViewAutoresizingFlexibleRightMargin常量,但不包括 UIViewAutoresizingFlexibleLeftMargin常量,因此表明 视图的左边距的宽度是固定的,但视图的宽度是 宽度和右边距可能会改变。因此,视图似乎锚定于 其超视图的左侧同时具有视图宽度和间隙 在视图右侧增加。
如果自动调整行为不能提供您的精确布局 需要您的视图,您可以使用自定义容器视图和覆盖 它的layoutSubviews方法可以更精确地定位您的子视图。
因此,如果您希望将视图定位到其超级视图的顶部和右侧,则可以应用以下掩码:
[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];
答案 3 :(得分:1)
superview具有 contentMode 和 autoresizesSubviews 等参数,其子视图的 autoresizingMask 都会调整行为
答案 4 :(得分:0)
为了记录,我抓了一个小时,因为我的单线UILabel不会自动调整字体大小以适应宽度。最后,这就是诀窍:
label.contentMode = UIViewContentModeScaleAspectFit;
我用谷歌搜索,似乎没有人澄清这个细节(每个人都告诉你标签应该是1行,设置adjustsFontSizeToFitWidth / minimumFontSize等)。 也许这个属性的默认值改变了?我在iOS 4.3上。