以编程方式设置UIView的自动调整大小掩码?

59

我需要以编程方式设置UIView的自动调整掩码。

我不知道如何实现这一点。

输入图像描述


14
我为此制作了一个简单的工具:http://erkanyildiz.me/lab/autoresizingmask,您可以使用它。 - erkanyildiz
2
@erkanyildiz 感谢您为那些不再想使用自动布局进行简单布局的人提供了复习。 - Anton Tropashko
@erkanyildiz,那个工具真的很棒。这让你想知道为什么Storyboard没有内置它呢。 - pnizzle
5个回答

103
为了实现您在截图中看到的效果,需要做与DrummerB建议相反的事情。您需要使用固定的顶部边距,因此您需要让其他边缘都是可变的,如下所示: Objective C:
view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
                        UIViewAutoresizingFlexibleLeftMargin |
                        UIViewAutoresizingFlexibleBottomMargin;

将一个属性设置为非"flexible"表示它是固定的(默认行为),这就是为什么没有"UIViewAutoResizingFixedTopMargin"这样的东西(因为它与不设置"UIViewAutoresizingFlexibleTopMargin"是相同的)。

用于Swift的编辑:

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

感谢Tom Calmon添加了Swift版本的首次更新。

Swift 5.0 更新:

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

干杯。


2
谢谢 @pnizzle!这应该是被采纳的答案! - Julian Osorio
没有人提到在哪里设置这个值。有哪些方法建议用于设置它? - Logicsaurus Rex
1
@LogicsaurusRex,通常在创建视图时设置自动调整大小掩码。但只要视图不为空,它也可以在其他任何地方设置。它也可以在InterfaceBuilder中设置。 - pnizzle
@LogicsaurusRex 关于Objective-C中的方法,您可以像我的回答中所示使用点语法,也可以使用setAutoResizingMask。 - pnizzle
@Bharath,你的编辑是错误的。屏幕截图指定了非可伸缩宽度和非可伸缩高度。不确定那是如何被批准的。请查看我的修复。 - pnizzle

24

你需要设置视图的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属性似乎无法正常工作,因为图像位于中心,但左右部分被裁剪或超出边界。 - Hiren
4
虽然这个答案对于想了解UIAutoResizingMask可能的值的人有所帮助,但提供的解决方案与屏幕截图不符。顶部边距应该固定,其他每一侧都应该保持灵活(不是宽度或高度,只是边缘)。请参见我的答案,以获得与屏幕截图匹配的解决方案。 - pnizzle

22

Swift 2.0:

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

6

Swift 4.1:

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

0

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

autoresizingMask=UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;

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