【问题标题】:2D Unity: expand UI element based on text to the bottom2D Unity:将基于文本的 UI 元素展开到底部
【发布时间】:2021-01-21 03:32:54
【问题描述】:

我有一个游戏对象(信息框),里面有一个..

  • 垂直布局组(边距为 20,控制子尺寸高度处于活动状态)
  • 一张图片
  • 内容大小调整器(垂直适合设置为首选大小,水平不受约束)

在这个信息框里面是一个文本元素,每次我更新文本时,我希望信息框展开或折叠,但只到底部。现在我的信息框总是展开或折叠到顶部和底部,但我不希望这种情况发生。我怎样才能做到这一点?我添加了一些屏幕截图以更好地可视化这一点。

这些是我对 InfoBox 的设置:

这些是我对文本的设置:

当我使用较少的文本时会发生这种情况,框从底部和顶部折叠,但我希望它保持固定在顶部(与旁边的绿色框在同一行)并且只折叠在底部:

任何帮助都非常感谢!

【问题讨论】:

    标签: unity3d gameobject


    【解决方案1】:

    您的主要问题看起来您也在父对象上使用ContentSizeFitter。所以这取决于这个父对象如何与其对应的父对象对齐。

    我知道这句话听起来很奇怪,但你所做的基本上是将对齐责任转移给父级。

    => 使您的 UI 元素与顶部对齐并向下增长。

    你需要做的就是设置

    • 锚最小 y -> 1
    • 锚点 Max y -> 1
    • 枢轴 -> 1

    或者直接去RectTransform检查器,打开对齐工具并按住Shift + Alt然后点击顶部对齐:


    对于第二个而不是使用ContentSizeFitter,我更喜欢拥有自己的脚本,只做它应该做的,仅此而已。

    您可以获得preferredHeight,这正是您正在寻找的价值。

    以下脚本总是简单地将首选高度应用于文本矩形。使用[ExecuteAlways] 这也适用于编辑模式。只需将其附加到与UI.Text 组件相同的GameObject

    [ExecuteAlways]
    [RequireComponent(typeof(Text))]
    [RequireComponent(typeof(RectTransform))]
    public class TextHeightFitter : MonoBehaviour
    {
        [SerializeField] private RectTransform _rectTransform;
        [SerializeField] private Text _text;
    
        private void Update()
        {
            if (!_text) _text = GetComponent<Text>();
            if (!_rectTransform) _rectTransform = GetComponent<RectTransform>();
    
            var desiredHeight = _text.preferredHeight;
            var size = _rectTransform.sizeDelta;
            size.y = desiredHeight;
            _rectTransform.sizeDelta = size;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2020-05-13
      • 2018-12-30
      • 1970-01-01
      • 2023-03-24
      • 2021-02-07
      相关资源
      最近更新 更多