Text Mesh Pro - 自动调整大小和内容大小调整器

问题描述 投票:0回答:1

所以我有一个带有文本的按钮。我正在通过脚本更新文本。有些按钮的文本比其他按钮多,所以我将其设置为“自动大小”。但即使这样,有时文本也不适合按钮,所以我希望按钮变大以适合文本。

问题在于垂直布局组和内容大小调整器。 TMP_Text 会增长,按钮也会增长,但它会以最大字体大小增长(即使打开自动大小),理想情况下,我希望它仅在缩小到尽可能小的大小后才增长。

我已经尝试了很多不同的可能性,包括垂直布局组、布局元素和内容大小调整器,但我完全不知道如何让它做我想做的事。

enter image description here 这就是我想要的(这是在编辑器中而不是运行时并且它有效)

enter image description here 编辑器里也有这个

enter image description here 这就是我得到的

我还注意到这种情况发生在空格上。如果我有一个单词之间没有空格,它似乎可以正确缩放。

编辑:所以我想我该如何让自动调整大小来处理空间?

c# unity-game-engine user-interface
1个回答
0
投票

设置:

┓ 容器
┗┳ 按钮
... ┗ TMP_Text

容器和所有按钮都具有“控制子尺寸”的 VerticalLayoutGroup 和“VerticalFit”设置为“首选尺寸”的 ContentSizeFitter


问题:

具有“autoSize”的 TMP_Text 的首选高度基于最大字体而不是最小字体。


解决方案:

您必须使用 LayoutElement 覆盖首选高度。以下 MonoBehaviour 类控制应添加到每个 TMP_Text 的 LayoutElement:

using TMPro;
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(TMP_Text))]
[RequireComponent(typeof(LayoutElement))]
[ExecuteInEditMode]
public class PreferMinSize : MonoBehaviour
{
    TMP_Text tmp;
    LayoutElement layout;
    [SerializeField, Tooltip("Minimum height of the text")] float minHeight = 50;

    private void OnEnable()
    {
        tmp = GetComponent<TMP_Text>();
        layout = GetComponent<LayoutElement>();

        tmp.OnPreRenderText -= OnTextChanged; // prevent adding multiple times
        tmp.OnPreRenderText += OnTextChanged;

        OnTextChanged(tmp.textInfo);
    }
    private void OnTextChanged(TMP_TextInfo info)
    {
        if (!this.enabled)
            return;

        if (tmp.enableAutoSizing == false)
            return;

        // get minimum height needed for min font size
        tmp.enableAutoSizing = false;
        tmp.fontSize = tmp.fontSizeMin;
        // set height of min font, but with a capped min size
        layout.preferredHeight = Mathf.Max(tmp.preferredHeight, minHeight);
        // restore behaviour
        tmp.enableAutoSizing = true;
    }
    private void OnDisable()
    {
        tmp.OnPreRenderText -= OnTextChanged;
    }
}

将此组件添加到按钮文本后,您可以设置“minHeight”参数来设置最小高度,文本将缩小到最小字体大小以填充最小高度,只有在此之后才会扩展文本。

演示: 在此输入图片描述 在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.