文本框背景通过Text框大小调整大小
IEnumerator RefreshInfo(TMP_Text chat, string chatInfo,bool isLeft, SpriteAtlas atlas)
{
//文本框最大多宽,最大多高
Vector2 minMaxText = new Vector2(400, 160);
//聊天气泡背景
Vector2 minMaxChatBg = new Vector2(380f, 183f);
//聊天背景和文本框的偏移
Vector2 offset = new Vector2(28f, 25f);
var ContentSizeFitter = chat.rectTransform.GetComponent<ContentSizeFitter>();
string info = UIUtil.ConvertChatBiaoqing(chatInfo);
chat.text = NoBreakingSpace(info);
LayoutRebuilder.ForceRebuildLayoutImmediate(chat.rectTransform);
if (chat.rectTransform.sizeDelta.x > minMaxText.x)
{
ContentSizeFitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
chat.rectTransform.sizeDelta = new Vector2(minMaxText.x, 32f);
}
LayoutRebuilder.ForceRebuildLayoutImmediate(chat.rectTransform);
if (chat.rectTransform.sizeDelta.y > minMaxText.y)
{
ContentSizeFitter.verticalFit = ContentSizeFitter.FitMode.Unconstrained;
chat.rectTransform.sizeDelta = minMaxText;
// chat.resizeTextForBestFit = true;
// chat.resizeTextMinSize = 20;
// chat.resizeTextMaxSize = 30;
}
LayoutRebuilder.ForceRebuildLayoutImmediate(chat.rectTransform);
yield return null;
if (isLeft)
{
var leftRect = leftchatImg.GetComponent<RectTransform>();
// //因为跳行导致的文本框虚宽的设置为正常尺寸
// chat.rectTransform.sizeDelta = new Vector2(chat.bounds.size.x, chat.rectTransform.sizeDelta.y);
leftRect.sizeDelta =
new Vector2(chat.bounds.size.x, chat.rectTransform.sizeDelta.y) + offset;
// if (leftRect.sizeDelta.x > minMaxChatBg.x || leftRect.sizeDelta.y > minMaxChatBg.y)
// {
// leftRect.sizeDelta = minMaxChatBg;
// }
this.transform.GetComponent<RectTransform>().sizeDelta = new Vector2(597f, leftRect.sizeDelta.y + offset.x);
}
else
{
var rightRect = rightchatImg.GetComponent<RectTransform>();
// //因为跳行导致的文本框虚宽的设置为正常尺寸
// chat.rectTransform.sizeDelta = new Vector2(chat.bounds.size.x, chat.rectTransform.sizeDelta.y);
rightRect.sizeDelta =
new Vector2(chat.bounds.size.x, chat.rectTransform.sizeDelta.y) + offset;
// if (rightRect.sizeDelta.x > minMaxChatBg.x || rightRect.sizeDelta.y > minMaxChatBg.y)
// {
// rightRect.sizeDelta = minMaxChatBg;
// }
this.transform.GetComponent<RectTransform>().sizeDelta = new Vector2(597f,
rightchatImg.GetComponent<RectTransform>().sizeDelta.y + offset.x);
chat.rectTransform.sizeDelta = new Vector2(rightRect.sizeDelta.x-offset.x, chat.rectTransform.sizeDelta.y);
chat.horizontalAlignment = HorizontalAlignmentOptions.Left;
}
}
public string NoBreakingSpace(string str)
{
if (str.Contains(" "))
{
return str.Replace(" ", "\u00A0");
}
return str;
}