[0]UI布局计算bug

假定一个UI结构,UI界面宽高为720*1280。
UI根目录下是一个box,取名为:m_Parent,设置布局参数为:left、right、top、bottom均为0,目的是初始化后m_Parent的宽高为720*1280。
m_Parent下放置两个box,分别取名m_Child_1跟m_Child_2,其中m_Child_1设置width为720,height为1280,m_Child_2设置布局参数为:left、right、top、bottom均为0,目的是初始化后m_Child_2的宽高为720*1280。
接下来是bug描述:布局属性在初始化时,使用父控件的私有宽度_width来计算控件的宽度,然后使用计算出的宽度与控件的width属性进行比较,但是这个width的计算中,如果控件本身私有宽度_width为0,那么就会循环计算子控件里x+width*scaleX最大的值,作为控件的宽度。这就导致一个问题,如果子控件中,计算出来最大的值正好等于父控件的私有宽度_width计算出的控件宽度,那么逻辑就不会往下走了,也就是说控件的的私有_width永远就不会被赋值了,都是0了。

img1.png


img2.png

 
这时候,该控件的width参数相当于被子控件劫持了,子控件的宽度修改为多少,控件的width就是多少。
最直接的表现就是在初始化后打印m_Parent、m_Child_1、m_Child_2的width、height、_width、_height信息时,发现m_Child_2的width、height、_width、_height属性均为0,而按照布局参数来说的话,都应该是720*1280才对。而m_Parent的_width、_height也都为0,width、height输出正确是因为底层计算时使用m_Child_1的宽高属性来计算,即上面所说的被m_Child_1劫持了宽高。
实例demo已上传附件。
已邀请:

156*****912

赞同来自:

忘记添加输出log截图了,现在加上
log.png

Laya_XS

赞同来自:

可能你对_划线的变量有个误解。在引擎中带_划线的变量都不能直接调用的,开发者最好使用官方正常暴露变量width和height。从你描述的问题中width和height是符合你的预期的,不清楚你是因为什么原因非要用_划线的变量,而且还是用中括号的方式调用,直接用width和height不更好吗?

Laya_XS

赞同来自:

你可以先这样临时解决下你的问题,我们内部在讨论下这块的修改。
截图.png

要回复问题请先

商务合作
商务合作