218

我有一个(可能是错误的)假设,即在 xib 中启用右边距指示器等同于使用UIViewAutoresizingFlexibleLeftMargin内部代码等。

所以,我曾经根据这张快照思考过: 在此处输入图像描述

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

还有苹果文档,标题为“使用自动调整规则自动处理布局更改”的部分:https ://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/创建视图.html

所以我现在有了一个新的概念,即以编程方式设置自动调整大小的掩码如何等同于 xib 设置:

场景1:仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)相当于:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

在西布?

场景2(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)代码中的设置等价于:

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

在西布?

我的 2 个更新的场景是否正确?我现在在我的理解中吗?

4

4 回答 4

47

是的,你引用的东西是正确的。另外,我同意这感觉有点倒退,所以我很欣赏你的帖子。

UIViewAutoresizingFlexibleMargins在使 UIView 的边距在各个方向上灵活时,您可能喜欢使用预处理器宏。我把它放在预编译的头文件中,所以它被包含在任何地方。

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

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

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

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

代替

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

就像上面的例子一样,我经常在一行中看到这些边距 OR'ed。只是难以阅读。

于 2011-10-18T23:01:22.377 回答
35

是的,Interface Builder 在某种意义上“颠倒了”它(或 UIView,取决于你如何看待它)。您引用的“场景”是正确的。

于 2011-10-13T14:33:50.517 回答
0

在此处输入图像描述

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

启用外部左线(左支柱)不等同于启用UIViewAutoresizingFlexibleRightMargin. 相反,UIViewAutoresizingFlexibleRightMargin=如果右支柱禁用,则打开,如果启用右支柱,则关闭

起初它很混乱,但如果你仔细观察,弹簧和支柱是有区别的。我不知道苹果为什么这样做,但对我来说,在某些情况下它更容易使用。在代码中使用相反的属性更加令人困惑。

于 2016-06-07T10:03:26.680 回答
0

斯威夫特 4 使用这个

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

Objective-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
于 2018-03-07T14:08:36.803 回答