以编程方式与Interface Builder / xib / nib进行自动调整屏蔽

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

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

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

另外还有苹果文档,标题为“使用自动修复规则自动处理版面布局”部分,链接如下: https : //developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

所以我现在有一个更新的概念,就如何以编程方式设置自动调整屏蔽等同于xib设置:

scheme1 :仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)相当于:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

在XIB?

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

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

在XIB?

我的2更新情况是否正确? 我现在在我的理解?

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

是的,你已经正确地引用了事情。 此外,我同意,这感觉有点倒退,所以出于这个原因,我感谢你的职位。

您可能喜欢使用预处理器Macro UIViewAutoresizingFlexibleMargins ,使UIView的边界在各个方向都是灵活的。 我把它放在预编译的头文件中,所以到处都是。

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

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

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

 myView.autoresizingMask = UIViewAutoresizingFlexibleMargins; 

代替

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

我经常看到这些边缘或上面的例子一起在一条线上。 只是难以阅读。

在这里输入图像描述

在框内启用垂直/水平箭头(称为弹簧)将使高度/宽度变得灵活。 但是启用一条外线(称为strut)将会使这个方面不灵活/不灵活。

启用外部左侧行(左侧撑杆)不等同于启用UIViewAutoresizingFlexibleRightMargin 。 相反, UIViewAutoresizingFlexibleRightMargin = 开,如果右支柱禁用, closures,如果右支柱启用。

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