egret-docs-master/extension/EUI/autoLayout/asynchronous/README.md

13 lines
1.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

失效验证机制能够确保自动布局的性能,但是会带来新的异步问题,大部分情况下我们并不会感受到失效验证的异步存在,因为它总是在本帧屏幕刷新前验证失效列表的,只有小部分在验证失效过程中又产生了新失效的情况,才会延迟到下一帧去处理。这种情况会导致的结果是在初始化面板时会闪一下。解决这个问题有多种方案,可以最初将面板添加到显示列表时设置`visible`为`false`,延迟一段时间后再显示。下面主要介绍另一种方案,提前处理失效验证:
* 1.首先确定“闪一下”的异步问题是否是自动布局的失效验证引起的。如果是由于异步加载图片引起的这种情况属于IO异步必须先预加载图片资源。
* 2.将面板添加到显示列表后,调用面板组件上的 `validateNow()` 方法。注意一定要先将面板添加到显示列表,再调用立即验证的方法。
还有一种少见使用情景,是给一个组件设置了自动布局属性,比如 `left``right`,想要获得它布局后的准确宽度。这种情况有两种思路:
* 1.延迟到帧末失效验证结束时访问宽度。可以使用`eui.callLater()`方法来实现延迟回调具体用法请参考API文档。
* 2.调用组件父级容器的 `validateNow()` 方法,这里请注意是"父级容器"的`validateNow()`方法,不是自身的,因为组件的布局是由父级容器决定的。