【问题标题】:Set UIView's autoresizing mask programmatically?以编程方式设置 UIView 的自动调整大小掩码?
【发布时间】:2012-09-23 14:30:57
【问题描述】:

我必须以编程方式为 UIView 设置 autoresizingMask。

我不知道如何实现。

【问题讨论】:

  • 我为此做了一个简单的工具:erkanyildiz.me/lab/autoresizingmask你可以使用它。
  • @erkanyildiz 感谢那些不想再使用自动布局进行简单布局的人的复习。
  • @erkanyildiz 这个工具太棒了。让你想知道为什么故事板没有内置 ey。

标签: iphone objective-c ios uiview autoresizingmask


【解决方案1】:

要实现该屏幕截图中的效果,您需要执行与 DrummerB 建议相反的操作。你想要一个固定的上边距,这样你就可以像这样使每一边都变得灵活:

目标 C:

view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
                        UIViewAutoresizingFlexibleLeftMargin |
                        UIViewAutoresizingFlexibleBottomMargin;

不将一侧设置为灵活意味着它将被固定(默认行为),这就是为什么没有 UIViewAutoResizingFixedTopMargin 之类的东西(因为它与不设置 UIViewAutoresizingFlexibleTopMargin 相同)

为 Swift 编辑:

view.autoresizingMask = [.FlexibleRightMargin, .FlexibleLeftMargin, .FlexibleBottomMargin]

感谢 Tom Calmon 添加了第一版 swift。

Swift 5.0 更新:

view.autoresizingMask = [.flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin]

干杯。

【讨论】:

  • 谢谢@pnizzle!。这应该是公认的答案!
  • 没有人提到在哪里设置这个值。建议使用哪些方法进行设置?
  • @LogicsaurusRex 您通常在创建视图时设置自动调整大小掩码。不过,只要视图不为零,它就可以在其他任何地方设置。也可以在InterfaceBuilder中设置
  • @LogicsaurusRex 至于objectiveC中的方法,你使用我的回答中显示的点语法,或者你可以使用setAutoResizingMask
  • @Bharath 您的编辑错误。屏幕截图指定了非灵活宽度和非灵活高度。不知道那是如何被批准的。请看我的修复。
【解决方案2】:

您必须设置视图的autoresizingMask 属性:

view.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;

可能的值在UIViewAutoresizing中定义:

enum {
   UIViewAutoresizingNone                 = 0,
   UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
   UIViewAutoresizingFlexibleWidth        = 1 << 1,
   UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
   UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
   UIViewAutoresizingFlexibleHeight       = 1 << 4,
   UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;

您可以使用按位或运算符| 设置多个值。

【讨论】:

  • 我必须使用 AspectFit 模式将图像设置在顶部。我正确获取了图像,但 AspecFit 属性无法正常工作,因为图像位于中心但左右部分被剪切或超出范围
  • 虽然这个答案有助于那些想知道 UIAutoResizingMask 可能值的人,但提供的解决方案与屏幕截图中的不匹配。上边距应该是固定的,并且每隔一个边都是灵活的(不是宽​​度或高度,只是边)。请参阅我的答案以获取与屏幕截图匹配的解决方案
【解决方案3】:

Swift 2.0:

view.autoresizingMask = [.FlexibleRightMargin, .FlexibleLeftMargin, .FlexibleBottomMargin]

【讨论】:

    【解决方案4】:

    Swift 4.1:

    view.autoresizingMask = [.flexibleHeight, .flexibleWidth, .flexibleTopMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin]
    

    【讨论】:

      【解决方案5】:

      要灵活设置 UIView 的上边距、下边距、左边距和右边距,请编写以下代码-

      autoresizingMask=UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-08
        • 2015-05-26
        • 1970-01-01
        • 2011-12-06
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多