【问题标题】:UIView Autoresizing ResourcesUIView 自动调整资源大小
【发布时间】:2011-01-08 21:28:29
【问题描述】:

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

有没有什么好的资源可以用来了解如何在 iPhone 上调整大小?

编辑:

我了解 Apple 使用的基本概念,例如 contentMode,并且我已通读 UIView 文档。我正在寻找能够更深入地解释 IB 设置在 SDK 中以编程方式提供的功能的内容。

【问题讨论】:

    标签: iphone uiview autoresize


    【解决方案1】:

    superview 有 contentModeautoresizesSubviews 等参数,所有带有 autoresizingMask 的子视图都可以调整大小

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 另一种说法:如果红色(如您所料),则内两行指定活动自动调整大小标志(如您所料),但如果灰色(与您期望的相反),外四行指定活动自动调整大小)。
      【解决方案3】:

      为了记录,我挠了一个小时,因为我的单行 UILabel 不会自动调整字体大小以适应宽度。最后,这成功了:

      label.contentMode = UIViewContentModeScaleAspectFit;
      

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

      【讨论】:

        【解决方案4】:

        我发现这篇文章有助于理解 iOS 自动调整大小。

        http://www.techotopia.com/index.php/IOS_4_iPhone_Rotation,_View_Resizing_and_Layout_Handling

        【讨论】:

        【解决方案5】:

        来自苹果:

        ... 通过组合中描述的常量来指定此掩码的值 UIViewAutoresizing 使用 C 按位​​ OR 运算符。结合这些 常量允许您指定视图的哪些维度应该增长或 相对于超级视图收缩。该属性的默认值 是 UIViewAutoresizingNone,表示视图不应该 完全调整大小。

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

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

        因此,如果您想定位锚定在其父视图的顶部和右侧的视图,您可以应用如下蒙版:

        [myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];
        

        【讨论】:

          猜你喜欢
          • 2013-07-16
          • 1970-01-01
          • 2011-07-14
          • 2013-01-22
          • 2016-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多