我在(可能是假的)假设在xib中启用右边距指示符等同于在代码中使用UIViewAutoresizingFlexibleLeftMargin
等等。
所以,我曾经根据这个快照思考:
今天晚些时候我不得不进行交叉检查,偶然发现 this thread 。
还有苹果文档,标题为标题部分 - “使用自动调整规则自动处理布局更改”链接:https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html
所以我现在有了一个新的概念,关于如何以编程方式设置自动调整掩码等同于xib设置:
场景1 :
仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)
相当于:
在XIB?
场景2 :
在代码中设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)
等同于:
在XIB?
我的2个更新方案是否正确?我现在理解了吗?
答案 0 :(得分:47)
是的,你已正确引用了一些内容。此外,我同意感觉有些倒退,所以我很感谢你的帖子。
在使UIView的边距在各方向都灵活时,您可能会喜欢使用预处理器宏UIViewAutoresizingFlexibleMargins
。我把它放在预编译的头文件中,所以它随处可见。
#define UIViewAutoresizingFlexibleMargins \
UIViewAutoresizingFlexibleBottomMargin | \
UIViewAutoresizingFlexibleLeftMargin | \
UIViewAutoresizingFlexibleRightMargin | \
UIViewAutoresizingFlexibleTopMargin
使用UIViewAutoresizingFlexibleMargins
会使UI元素保持居中,因为它不会拥抱任何一方。要使元素与其父元素一起增长/缩小,请分别设置UIViewAutoresizingFlexibleWidth
和UIViewAutoresizingFlexibleHeight
。
我喜欢使用UIViewAutoresizingFlexibleMargins
因为我可以稍后引用它:
myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;
而不是
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
我经常看到这些边距在一行上或者像上面的例子一样。只是很难读。
答案 1 :(得分:35)
是的,Interface Builder在某种意义上使它“逆转”(或UIView,取决于你如何看待它)。您引用的“情景”是正确的。
答案 2 :(得分:0)
在框内启用垂直/水平箭头(称为弹簧)将使高度/宽度变得灵活。但启用外线(称为strut)会使该方面不灵活/不灵活。
启用左外侧行(左侧支柱)并不等同于启用UIViewAutoresizingFlexibleRightMargin
。相反,UIViewAutoresizingFlexibleRightMargin
= on 如果右支撑已禁用,关闭如果启用了右支撑。
一开始很混乱,但如果仔细观察,弹簧和支柱就会有所不同。我不知道Apple为什么会这样做,但对我来说,有些情况下它更容易使用。在代码中使用相反的属性更加令人困惑。
答案 3 :(得分:0)
Swift 4 使用这个
gadBannerView?.autoresizingMask = [.flexibleRightMargin , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]
<强>目标C 强>
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;