做一个项目,遇到这个该死的问题,尝试了几乎所有解决方法,几近崩溃,终于找到完美解决方案。因为在网上,无论中文还是英文,搜索了无数遍,都没人给出正确答案,所以,在此记下,但愿能帮到跟我一样遇到这个问题的人们。
1,TextField + UIScrollBar方法:
该方法对于普通的HTML没有问题,对于文本就足以显示滚动条的情况,也没有问题,但如果你像我一样,只有一句话介绍,加一个图片,你就会发现,怎么样也无法显示滚动条。图片被切掉一半,原因是Htmltext中的img图片是后载入的,也就是说,你加上scrollbar时,textfield的高度根本不足以显示滚动条。为了解决这个问题,我甚至试过用getimagerefrence方法监听img图片的载入事件,然后重新用uiscrollbar.update来重绘滚动条。但是,很遗憾,理论上行得通的办法,实际上,是没有用的。
2,直接用textarea
textarea实际上就是上面的组合。结果不用说啦,还是没法解决。
3,终极方案:Textfield+ScrollPane
最终的解决方法,是建一个textfield,将其multiline和wordwrap设为true,再将其width设置好,将autosize设置成left,将scrollpane的source指向该textfield。最终,问题终于正常解决。注意:multiline一定要设置成true,不然,你的所有段落都会合并成一段的,这个小故事让我卡了半天才反应过来。下面是我的一小段实现这个功能的AS3代码。
代码
var t_content:TextField=new TextField();
t_content.x=0;
t_content.y=0;
t_content.multiline=true;
t_content.border=true;
t_content.styleSheet=ContentStyle;
t_content.width=box.width;
t_content.autoSize="left";
t_content.condenseWhite=true;
t_content.wordWrap=true;
t_content.htmlText=p_content;
box.addChild(t_content);
var aSp:ScrollPane = new ScrollPane();
box.addChild(aSp);
aSp.source = t_content;
aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
aSp.setSize(t_content.width, 340);
t_content.x=0;
t_content.y=0;
t_content.multiline=true;
t_content.border=true;
t_content.styleSheet=ContentStyle;
t_content.width=box.width;
t_content.autoSize="left";
t_content.condenseWhite=true;
t_content.wordWrap=true;
t_content.htmlText=p_content;
box.addChild(t_content);
var aSp:ScrollPane = new ScrollPane();
box.addChild(aSp);
aSp.source = t_content;
aSp.horizontalScrollPolicy=ScrollPolicy.OFF;
aSp.setSize(t_content.width, 340);