以编程方式对Interface Builder/xib/nib自动调整掩码

Raj*_*dal 217 cocoa-touch uiview ios autoresizingmask

我在(可能是错误的)假设中,在xib中启用右边距指示符等同于使用UIViewAutoresizingFlexibleLeftMargin内部代码等等.

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

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

还有苹果文档,标题为标题部分 - "使用自动调整规则自动处理布局更改"链接:https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

所以我现在脑子里有一个更新的概念,关于如何以编程方式设置自动调整掩码等同于xib设置:

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

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

在XIB?

场景2:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)代码设置相当于:

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

在XIB?

我的2个更新方案是否正确?我现在理解了吗?

Sam*_*Sam 47

是的,你已正确引用了一些东西.此外,我同意它感觉有点倒退,所以为此我感谢你的帖子.

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

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin
Run Code Online (Sandbox Code Playgroud)

使用UIViewAutoresizingFlexibleMargins将使UI元素保持居中,因为它不会拥抱任何一方.要使元素与其父元素一起增长/缩小UIViewAutoresizingFlexibleWidth,请UIViewAutoresizingFlexibleHeight分别设置和.

我喜欢使用UIViewAutoresizingFlexibleMargins因为我可以稍后引用它:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;
Run Code Online (Sandbox Code Playgroud)

代替

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
Run Code Online (Sandbox Code Playgroud)

通常我会看到这些边距在一行上或者像上面的例子一样.只是很难读.

  • 每个方向都应该灵活(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)我猜?或者我又困惑了! (4认同)
  • FlexibleMargins将使元素保持居中(不拥抱左,上,右或下边距).灵活的宽度/高度将使ui元件分别生长/收缩. (4认同)
  • 现在一切都清楚了吗?另外,当我说感谢你的帖子时,我的意思是真的.我实际上很喜欢它b/c这在过去让我很困惑.我认为这是一个很棒的问题. (4认同)
  • 是的,谢谢,现在我明白了,"灵活的边距"和"灵活的宽度/高度".这解释了一切,你的"不拥抱左,上,右或下边距"是一个很好的解释方式:) (3认同)

Dar*_*ust 35

是的,Interface Builder在某种意义上使它"逆转"(或UIView,取决于你如何看待它).您引用的"情景"是正确的.