更改框架时调用Autolayout layoutSubviews

时间:2013-11-08 10:41:10

标签: ios autolayout layoutsubviews

这是对事情如何运作的分析,我希望我能找到这种行为的解释,而不必阅读关于iOS6 +上的自动布局的整个互联网。

我有3个类似的场景,如下图所示。唯一的区别是他们如何布置观看次数viewAviewB

1)

enter image description here

2)

enter image description here

3)

enter image description here

在每个场景中,ViewController每秒多次调用moveGrandchild方法。在该方法中,它抓取一个不是self.view的直接子节点的视图,并为其设置一个新帧。新帧仅与{1}}值不同。人们会期望origin.x会不断向屏幕的右侧移动,这正是发生的事情。但不同的是,在每个场景中调用viewB时。

以下是每种方案的控制台输出:

1)

2013-11-08 11:31:27.048 ProbaAutoLayout [3641:907] VC viewDidLayoutSubviews

2013-11-08 11:31:27.052 ProbaAutoLayout [3641:907] ViewA layoutSubviews

2013-11-08 11:31:27.054 ProbaAutoLayout [3641:907] ViewB layoutSubviews

2013-11-08 11:31:27.240 ProbaAutoLayout [3641:907] ViewA layoutSubviews

2013-11-08 11:31:27.439 ProbaAutoLayout [3641:907] ViewA layoutSubviews

2013-11-08 11:31:27.639 ProbaAutoLayout [3641:907] ViewA layoutSubviews

......无限期地重复......

2)

2013-11-08 11:34:06.532 ProbaAutoLayout [3658:907] VC viewDidLayoutSubviews

2013-11-08 11:34:06.536 ProbaAutoLayout [3658:907] ViewA layoutSubviews

2013-11-08 11:34:06.539 ProbaAutoLayout [3658:907] ViewB layoutSubviews

3) 与2相同

在每个场景中,viewB正在向右移动,不会停止。仅在第一种情况下,layoutSubviewslayoutSubviews的父级)viewA被重复调用。

当图像显示:viewB时,表示视图是使用// frame set explicitly创建的,并且没有创建涉及该视图的约束。当它显示:initWithFrame:时,表示涉及该视图的约束被添加到其父视图中。

问题是:为什么每次我在场景1中更改viewB的框架时都会在viewA上调用layoutSubviews而不是其他任何框架?

0 个答案:

没有答案