[0]Panel初始化BUG

这应该是一个很老的BUG了,一直没有被修复,我看了下源码还是没修复就把自己改的同步一下,不知道是不是还有更加正确的
做法,有的话请指教一下。
Panel创建后,同帧设置Panel的hScrollBar="",然后refresh(),设置value值,则面板刷新位置出错,因为setContentSize实际上
当前帧并没有调用,而之后调用创建在了0,0点,因此位置错误了

类似的BUG 
https://ask.layabox.com/question/40655​ 
https://ask.layabox.com/question/15874


Panel.ts修改:这里改为取了一下当前scrollbar的值
    /**
     * @private
     * 设置内容的宽度、高度(以像素为单位)。
     * @param width 宽度。
     * @param height 高度。
     */
    private setContentSize(width: number, height: number): void {
        var content: Box = this._content;

        var rectX = 0;
        var rectY = 0;
        if (this.vScrollBar) rectY = this.vScrollBar.value;
        if (this.hScrollBar) rectX = this.hScrollBar.value;

        content.width = width;
        content.height = height;
        content._style.scrollRect || (content.scrollRect = Rectangle.create());
        content._style.scrollRect.setTo(rectX, rectY, width, height);
        content.scrollRect = content.scrollRect;
    }
已邀请:

Laya_Fred

赞同来自:

您好,按照您描述的设置panel如下:

1.png

设置hscrollbar的value为150,实际运行如下:

2.gif


已将laya.ui.js内的setContentSize修改。实际上滑动位置在点击panel后并未正常,是我的操作设置存在与您不一样的地方吗?或者您可以提交一个存在问题的示例,这样更加方便的定位问题。

Laya_Fred

赞同来自:

感谢您的反馈与建议,我们正在定位panel的问题,后续情况会及时回复您的~

Laya_Fred

赞同来自:

您好,目前我们定位问题为在设置滑动条value的时候,实际上由于资源并未加载完毕,导致panel在计算min与max时为0,产生设置了滑动条的value也不能达到预期的效果的问题,正因如此所以有开发者提到可以通过定时器延迟几帧设置value、或者手动设置max来规避这个问题;
在1.0版本中我们需要您使用除image外的ui组件时都要进行预加载资源后才能进行更换皮肤等操作,但在2.0版本我们在进行诸如更换皮肤等操作时,考虑了未加载的情况,但一些计算布局等函数内由于需要根据资源的大小来计算,会导致例如panel这个情况的出现。我们建议您仍是预加载资源后再设置组件内容。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作