项目已经在大厂正式上线半个月了,忙碌了大半年的时间啊。时间实在是太赶了,上线的那几天,一堆问题,通宵达旦的修复问题,几乎没这么睡过,想想都心累呀!
*************************************************分割线***********************************************************
之前有说过,聊天界面是之前留下来的锅,卡顿问题已经解决,图片长度也可以处理。但在大厂的一个月测试的时候发现,聊天有很多问题,很严重:乱码问题,表情偏移等问题。发现这应该是占位符问题导致,而且是偶现,切换后台啥的又突然好了,应该是底层渲染的时候计算有问题导致。不清楚是不是LinkImageText这个脚本被修改太多导致的。
为了快速解决这些问题,就用之前使用过的TextMeshPro,看了下替换情况,发现从LinkImageText替换为TextMeshPro,需要的时间不是很多,1个下午就替换完毕,之前聊天是一个Text,所以替换很快。但是为了性能考虑,再次优化,使用了另一个插件SuperScrollView。
SuperScrollView需要根据UI的高度值和宽度值来计算的,但是TextMeshPro有个bug就是不会修改RectTransform的值,只好每次修改文本内容的时候,强制调用ForceMeshUpdate()来获取渲染的高度值和宽度值。顺带修改下SuperScrollView的获取高度值和宽度值的接口,将RectTransform.rect.height和RectTransform.rect.width修改成如下接口:
private TMP_Text m_tmpText;
private bool m_bIsFind = false;
private bool GetBIsTMPText()
{
bool bIsTmpText = false;
if (!m_bIsFind)
{
m_tmpText = gameObject.GetComponent<TMP_Text>();
m_bIsFind = true;
}
bIsTmpText = m_tmpText != null;
return bIsTmpText;
}
public float GetHeight()
{
float height = 0.0f;
bool bIsTmpText = GetBIsTMPText();
if (bIsTmpText)
{
height = m_tmpText.renderedHeight;
if (CachedRectTransform.rect.height != m_tmpText.renderedHeight)
CachedRectTransform.sizeDelta = new Vector2(CachedRectTransform.sizeDelta.x, m_tmpText.renderedHeight);
}
else
height = CachedRectTransform.rect.height;
return height;
}