关于widget 的初始化时间的问题

1.组件初始化是在第一次update 之后 ,第二次udpate之前么?
2. 测试发现 widget 初始化是在第二帧率才初始化成功

@jare 1111

@子龙山人 1111

Layout 和 widget 都是在 before_visit 之前生效的(Widget 在 layout 之前处理完布局)。你如果要在第一帧取到正确的 size,可以用 cc.director.on(cc.Director.EVENT_BEFORE_VISIT, your-callback); 来注册一个 before visit 事件。

引擎里面事件执行的顺序是: onLoad -> onEnable -> start -> update -> lateUpdate->before_visit(需要用 cc.director.on 来注册) -> after_visit(需要用 cc.director.on 来注册) -> after_draw (需要用 cc.director.on 来注册)

可以用 widget.updateAlignment() 来立刻强制更新一次布局。

在其它帖子复制来的

1赞
  1. 第一次 update 之前就初始化
  2. 谁说 widget 初始化后就立刻会对齐呢?如果要立刻拿到对齐结果,请调用 widget.updateAlignment()

那第一次初始化之后拿到的还是默认的size

谁说 widget 初始化后就会立刻对齐呢?(如果立刻对齐,你脚本里修改又了场景,那这一帧渲染时排版不就错了?)

那怎么在第一帧之前拿到正确是size啊。不是默认的,是对齐之后的

可以用 widget.updateAlignment() 来立刻强制更新一次布局。

执行 updateAlignment 后 size 就是对的了

updateAlignment()这个方法可以在任何时候被调用么? 为什么我不在onLoad方法里面调用的 在别的方法里面调用的没有生效对齐呢

任何时候都会生效,不过要升级到 1.4.2