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