阿拉伯语右边字符被截断一小段问题


rt,

创建一个label,字体改为水平向右对齐,就会出现这个问题

外语用系统字体都很容易出现这个,最好下载个字体,但也不能完全避免

用2.3.1版本的时候就有这个问题,试试把label的宽度固定试试,别用默认的label自适应宽度。

这个问题我也遇到过,换行都有可能产生截断,目前的处理方式就是设置为左对齐根据对话框大小进行补空格

加个空格,或者不管,在真机上不会出现问题

目前我是在web端上发现有这个问题,这个截断问题在阿拉伯文本加空格我试过是无效的,只能左对齐后去补齐空格 :joy:

//阿拉伯语特殊处理

let CCLabel = Label;

Object.defineProperty(CCLabel.prototype, ‘string’, {

set(value: string) {

    let self = this as Label;

    if (value === null || value === undefined) {

        value = '';

    } else {

        value = value.toString();

    }

    if (this._string === value) {

        return;

    }

    const win = window as any;

    // if (win._languageData.language == "ar" && self.horizontalAlign == Label.HorizontalAlign.RIGHT) {

    //     value = "    " + value + "    ";

    // }

    if (win._languageData.language == "ar") {

        value = Reshaper.default.reshape(value);

        if (self.overflow == Label.Overflow.RESIZE_HEIGHT || this.target_resize) {

            this.target_resize = true;

            self.overflow = Label.Overflow.SHRINK;

            let size = self.node.getComponent(UITransform).contentSize;

            let height = size.height;

            let max = size.width / self.fontSize / 0.4;

            let index = 0;

            let h = 1;

            for (let i = 0; i < value.length; i++) {

                index++;

                let str = value[i];

                if (index >= max) {

                    if (str == ' ') {

                        value = insertStr(value, i, '\n');

                        i++;

                        index = 0;

                        h++;

                    }

                }

            }

            self.node.getComponent(UITransform).setContentSize(size.width, self.lineHeight * 1.26 + (self.lineHeight * (h - 1)));

        }

    }

    // options

    // Reshaper.reshape(arabicWord, {

    //     ligatures: true,

    //     delete_harakat: false

    // });

    this._string = value;

    this.updateRenderData();

}
3赞

自己写了一套排版方法适配阿拉伯语.需要用到npm下载的库js-arabic-reshaper(这个处理过的字体浏览器乱码,原生没问题,处理过的字体如果不换行是没问题的,以上代码只是解决阿拉伯语换行单词被切成两半的问题)

1赞

支持一下良心妹子

请问下 阿拉伯文本 顺序被打乱是如何处理的

不是顺序被打乱,而是阿拉伯人的阅读方式吧.

mark.