以编程方式自动调整遮罩大小与Interface Builder / XIB / NIB


216

我当时(可能是错误的)假设是,在xib中启用正确的边距指示符等效于使用UIViewAutoresizingFlexibleLeftMargin内部代码,依此类推。

因此,我曾经根据此快照进行思考: 在此处输入图片说明

今天晚些时候,我不得不交叉核对,偶然发现了这个线程

还有苹果文档,该文档的标题为“使用自动调整大小规则自动处理布局更改”部分,其标题在此链接中:https : //developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreationViews.html

因此,我现在有了一个新的概念,即关于以编程方式设置自动调整大小的遮罩等同于xib设置的想法:

方案1:仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)等同于:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

在XIB?

方案2(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)在代码中进行设置等效于:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

在XIB?

我的2个新场景是否正确?我现在在我的理解范围内吗?


3
你在开玩笑吧?但是似乎也有我的困惑。因此,如果我想拥抱顶部,请打开底部的自动调整大小。干得好苹果。这是我见过的最愚蠢的设置。
user4951 2012年

1
如果要拥抱顶部,必须确保不会在位掩码代码中提及UIViewAutoresizingFlexibleTopMargin。我之前的假设是错误的,这就是为什么我发布此问题以清除内容。
Raj Pawan Gumdal

您的假设是正确的。你哪里错了
user4951 2012年

是的,您引用的两种情况都是正确的。

3
我为此做了一个简单的工具:erkanyildiz.me/lab/autoresizingmask您可以使用它。
erkanyildiz

Answers:


35

是的,Interface Builder在某种意义上具有“反转”功能(或UIView,取决于您的外观)。您引用的“方案”是正确的。


47

是的,您已正确引用了内容。另外,我同意感觉有点倒退,因此,我感谢您的帖子。

UIViewAutoresizingFlexibleMargins当使UIView的边距在各个方向上都灵活时,您可能想使用预处理器宏。我把它放在预编译的头文件中,因此它随处可见。

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

使用UIViewAutoresizingFlexibleMargins它将使UI元素保持居中,因为它不会拥护任何一侧。要使元素随其父元素增大/缩小UIViewAutoresizingFlexibleWidth,请UIViewAutoresizingFlexibleHeight分别设置和。

我喜欢使用,UIViewAutoresizingFlexibleMargins因为以后可以像这样引用它:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

代替

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

我经常看到这些边距在上面的示例中一行或在一起。只是很难读。


4
我猜应该在每个方向上都灵活(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)吗?还是我再次感到困惑!
2011年

4
FlexibleMargins将使元素保持居中(不拥抱左,上,右或下边距)。灵活的宽度/高度将使ui元素分别增大/缩小。
山姆

4
现在一切都清楚了吗?另外,当我说我感谢您的帖子时,我的意思是真的。我实际上很喜欢它,因为它过去使我感到困惑。我认为这是一个很好的问题
山姆

3
是的,谢谢,现在我得到了“弹性边距”和“弹性宽度/高度”。这就说明了一切,您的“不拥抱左,上,右或下边距”是一种很好的解释方式:)
Raj Pawan Gumdal

0

在此处输入图片说明

在框内启用垂直/水平箭头(称为弹簧)将使高度/宽度灵活。但是启用外线(称为支撑)将使该侧不灵活/不灵活。

启用左外侧的线(左支柱)不等于启用UIViewAutoresizingFlexibleRightMargin。相反,如果禁用右撑杆,则UIViewAutoresizingFlexibleRightMargin= on;如果启用了右撑杆,则= off

刚开始时会很混乱,但是如果您仔细观察,弹簧和支柱会有所不同。我不知道苹果为什么要这样做,但是对我来说,在某些情况下它更易于使用。在代码中使用相反的属性会更加令人困惑。


0

Swift 4 使用此

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

物镜

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.