flex 滚动条居左 及 addElement()方法内部实现问题

来源:互联网 发布:中国史前文明 知乎 编辑:程序博客网 时间:2024/04/30 00:04

公司一个项目要实现聊天是模块,具体需求是滚动条居左,置底,采用TextLine类实现图文混排以提高效率。由于textLine不支持html,所以需要重写一个类。lash里处理只读字体效率最高的类是TextLine,而非TextField。对滚动条居左,我采用办法是左右并排两个两个Canvas容器,用group剪裁右边容器的滚动条,把左边容器位置设置成负的,只显示一个滚动条,然后利用代码控制左边滚动条与右边同步,代码如下



我在给messages添加内容时采用addElement(p)方法,p是这这边封装的一个类继承sprite,里面是一段html文字,我messages里面不断添加新的聊天内容,最后问题出现,当添加的聊天行数足够多时,返现messages最底端与最后一个p之间的空白部分越来越大,我输出messages的高度,和总的p的高度,高度是一致,没道理啊。难道是p在messages里面的位置有重叠的地方导致底端空出来,经过测试排除这个可能,最后打印出每个p的高度,发现它的高度是个小数,但小数也没道理啊,难道他会四舍五入??还是我封装的类有问题。最后决定把messages提出来往里面不断添加自定义的简单组件,我自定义了一个mxml模块test,里面就一个lable,先设置它的高度是个小数,比如14.75.然后不断的messages添加test,messages.addElement(test),,发现果然,messages底端与最后一个test的空白位置越来越大,排除自己的类库问题,问题基本可以确定是addElement内部机制的问题,难道它会把给他添加的子组件的对高度进行取int然后取值,没办法,现在只能采用的办法是,对p的高度进行最小整数取值然后重新设置高度  如:p.height = Math.ceil(p.height);//重新设置p高度  取最小整数。