HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 什么导致容器视图保持其子视图的框架匹配其边界?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想更好地了解集装箱视图在故事板中的工作原理.行为似乎是容器视图将强制其子视图调整大小以填充容器. @H_607_2@我没有看到解释它的限制,没有提到什么类.看起来像一些故事板魔术.

@H_607_2@我认为容器视图必须是UIView的一个子类,我会有一个野蛮的猜测,并假定它的UIContainerView,但搜索文档只产生两个结果.

@H_607_2@那么它如何工作?

解决方法

故事板编辑器(Interface Builder)在编辑期间将嵌入视图的框架设置为容器视图的边界.因此,当故事板写入文件时,视图的序列化大小相同.无论故事板是否启用自动布局,都会发生这种情况. @H_607_2@故事板中每个视图控制器的顶级视图还具有自动调整掩码设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,无论该故事板是否启用自动布局.

@H_607_2@如果启用了自动布局,则每个顶级视图都将其转换为AutotoresizingMaskToConsTraints设置为YEs.这与这些顶级视图的所有后代不同.所有的后代都将AutotoresizingMaskToConsTraints设置为NO.

@H_607_2@嵌入关系表示为UIStoryboardEmbedSegue类的一部分. (这是一个私有类,而不是公共API的一部分.)

@H_607_2@当UIStoryboardEmbedSegue收到执行消息时,它会加载目标视图控制器的视图,并将其添加为容器视图的子视图.然后将嵌入视图的自动调整Mask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight.这是多余的,因为Interface Builder已经在故事板中设置了它.

@H_607_2@然后 – [UIStoryboardEmbedSegue执行]检查嵌入视图的翻译自动设置MaskToConsTraints.这也是多余的,因为Interface Builder将其设置为YEs.

@H_607_2@如果嵌入视图的翻译AutotoresizingMaskToConsTraints为YES,则执行将嵌入视图的框架设置为容器视图的边界.再次,多余.

@H_607_2@如果嵌入视图的翻译AutotoresizingMaskToConsTraints为NO,执行添加约束H:| [childView] |和V:| [childView] |,因此强制嵌入视图填充容器视图. (是的,它实际上使用视觉格式语言.)这个分支不应该达到.

@H_607_2@当视图将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>
@H_607_2@所以这就是“导致容器视图保持其子视图的框架与其边界匹配”.

@H_607_2@我通过查看.storyboard文件(这是令人惊讶的可读XML),并在Hopper中查看了 – [UIStoryboardEmbedSegue perform].

@H_607_2@至于为什么他们有冗余的检查,我可以想到几个可能的原因:

@H_607_2@> IB(可能在预发行版本中)并不总是以现在的方式设置视图属性,因此在加载旧故事板时代码不是多余的.>苹果公司有内部工具生成不同于IB的故事板.>该代码是为了与IB的未来版本的前向兼容性,允许顶级故事板视图具有不同的属性.

大佬总结

以上是大佬教程为你收集整理的ios – 什么导致容器视图保持其子视图的框架匹配其边界?全部内容,希望文章能够帮你解决ios – 什么导致容器视图保持其子视图的框架匹配其边界?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。