以编程方式与Interface Builder / xib / nib进行自动调整屏蔽
我在一个(可能是错误的)假设,使xib中的右边距指示符相当于使用内部代码中的UIViewAutoresizingFlexibleLeftMargin
等。
所以,我曾经根据这个快照思考:
今天晚些时候,我不得不交叉检查,并偶然发现这个线程 。
另外还有苹果文档,标题为“使用自动修复规则自动处理版面布局”部分,链接如下: https : //developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html
所以我现在有一个更新的概念,就如何以编程方式设置自动调整屏蔽等同于xib设置:
scheme1 :仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)
相当于:
在XIB?
场景2 :在代码中设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)
相当于:
在XIB?
我的2更新情况是否正确? 我现在在我的理解?
是的,Interface Builder在某种意义上(或UIView,取决于你如何看待它)具有“逆转”。 你引用的“场景”是正确的。
是的,你已经正确地引用了事情。 此外,我同意,这感觉有点倒退,所以出于这个原因,我感谢你的职位。
您可能喜欢使用预处理器Macro UIViewAutoresizingFlexibleMargins
,使UIView的边界在各个方向都是灵活的。 我把它放在预编译的头文件中,所以到处都是。
#define UIViewAutoresizingFlexibleMargins \ UIViewAutoresizingFlexibleBottomMargin | \ UIViewAutoresizingFlexibleLeftMargin | \ UIViewAutoresizingFlexibleRightMargin | \ UIViewAutoresizingFlexibleTopMargin
使用UIViewAutoresizingFlexibleMargins
将使UI元素保持居中,因为它不会拥抱任何一方。 要使元素与其父项一起增长/缩小, UIViewAutoresizingFlexibleHeight
分别设置UIViewAutoresizingFlexibleWidth
和UIViewAutoresizingFlexibleHeight
。
我喜欢使用UIViewAutoresizingFlexibleMargins
因为我可以稍后引用它:
myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;
代替
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
我经常看到这些边缘或上面的例子一起在一条线上。 只是难以阅读。
在框内启用垂直/水平箭头(称为弹簧)将使高度/宽度变得灵活。 但是启用一条外线(称为strut)将会使这个方面不灵活/不灵活。
启用外部左侧行(左侧撑杆)不等同于启用UIViewAutoresizingFlexibleRightMargin
。 相反, UIViewAutoresizingFlexibleRightMargin
= 开,如果右支柱禁用, closures,如果右支柱启用。
起初是相当混乱的,但是如果你仔细看,弹簧和支柱就会有所不同。 我不知道为什么苹果这样做,但对我来说,有一些情况下,它更容易使用。 在代码中使用相反的属性更令人困惑。