
我没有看到解释它的限制,没有提到什么类.看起来像一些故事板魔术.
我认为容器视图必须是UIVIEw的一个子类,我会有一个野蛮的猜测,并假定它的UIContainerVIEw,但搜索文档只产生两个结果.
那么它如何工作?
解决方法 故事板编辑器(Interface Builder)在编辑期间将嵌入视图的框架设置为容器视图的边界.因此,当故事板写入文件时,视图的序列化大小相同.无论故事板是否启用自动布局,都会发生这种情况.故事板中每个视图控制器的顶级视图还具有自动调整掩码设置为UIVIEwautoresizingFlexibleWIDth | UIVIEwautoresizingFlexibleHeight,无论该故事板是否启用自动布局.
如果启用了自动布局,则每个顶级视图都将其转换为autotoresizingMaskToConstraints设置为YES.这与这些顶级视图的所有后代不同.所有的后代都将autotoresizingMaskToConstraints设置为NO.
嵌入关系表示为UIStoryboardEmbedSegue类的一部分. (这是一个私有类,而不是公共API的一部分.)
当UIStoryboardEmbedSegue收到执行消息时,它会加载目标视图控制器的视图,并将其添加为容器视图的子视图.然后将嵌入视图的自动调整Mask设置为UIVIEwautoresizingFlexibleWIDth | UIVIEwautoresizingFlexibleHeight.这是多余的,因为Interface Builder已经在故事板中设置了它.
然后 – [UIStoryboardEmbedSegue执行]检查嵌入视图的翻译自动设置MaskToConstraints.这也是多余的,因为Interface Builder将其设置为YES.
如果嵌入视图的翻译autotoresizingMaskToConstraints为YES,则执行将嵌入视图的框架设置为容器视图的边界.再次,多余.
如果嵌入视图的翻译autotoresizingMaskToConstraints为NO,执行添加约束H:| [childVIEw] |和V:| [childVIEw] |,因此强制嵌入视图填充容器视图. (是的,它实际上使用视觉格式语言.)这个分支不应该达到.
当视图将autotoresizingMaskToConstraints设置为YES时,自动布局会自动添加NSautoresizingMaskLayoutConstraint类型的约束,并在更改视图框架时保持最新.例如,窗口的根视图用于使用自动调整约束填充窗口:
<NSautoresizingMaskLayoutConstraint:0x7555d00 h=-&- v=-&- UIVIEw:0x7671780.mIDX == UIWindow:0x7551010.mIDX>,<NSautoresizingMaskLayoutConstraint:0x7555de0 h=-&- v=-&- UIVIEw:0x7671780.wIDth == UIWindow:0x7551010.wIDth>,<NSautoresizingMaskLayoutConstraint:0x7555eb0 h=-&- v=-&- UIVIEw:0x7671780.mIDY == UIWindow:0x7551010.mIDY + 10>,<NSautoresizingMaskLayoutConstraint:0x7555ef0 h=-&- v=-&- UIVIEw:0x7671780.height == UIWindow:0x7551010.height - 20>
所以这就是“导致容器视图保持其子视图的框架与其边界匹配”.
我通过查看.storyboard文件(这是令人惊讶的可读XML),并在Hopper中查看了 – [UIStoryboardEmbedSegue perform].
至于为什么他们有冗余的检查,我可以想到几个可能的原因:
> IB(可能在预发行版本中)并不总是以现在的方式设置视图属性,因此在加载旧故事板时代码不是多余的.>苹果公司有内部工具生成不同于IB的故事板.>该代码是为了与IB的未来版本的前向兼容性,允许顶级故事板视图具有不同的属性.
总结以上是内存溢出为你收集整理的ios – 什么导致容器视图保持其子视图的框架匹配其边界?全部内容,希望文章能够帮你解决ios – 什么导致容器视图保持其子视图的框架匹配其边界?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)