2D Unity:根据文本展开 UI 元素到底部
2D Unity: expand UI element based on text to the bottom
我有一个游戏对象 (InfoBox) 带有..
- 垂直布局组(所有边距 20,控制子尺寸高度激活)
- 一张图片
- a 内容大小适配器(垂直适合设置为首选大小,水平不受约束)
此信息框内是一个文本元素,每次更新文本时,我都希望信息框展开或折叠,但仅限于底部。现在我的 InfoBox 总是在顶部和底部展开或折叠,但我不希望这种情况发生。我怎样才能做到这一点?我添加了一些屏幕截图以更好地形象化这一点。
这些是我对信息框的设置:
这些是我对文本的设置:
这就是当我使用更少的文本时发生的情况,框从底部和顶部折叠,但我希望它固定在顶部(与旁边的绿色框在同一行)并且仅在底部折叠:
非常感谢任何帮助!
你的主要问题看起来你也在 parent object 上使用了 ContentSizeFitter
。所以这取决于这个 parent object 如何与其对应的 parent.
对齐
我知道这句话听起来很奇怪,但你所做的基本上是将对齐责任转移到 parent。
=> 使您的 UI 元素与顶部对齐并向下增长。
为此你需要做的就是设置
- 最小锚点 ->
1
- 锚最大 y ->
1
- y 轴 ->
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;
}
}
我有一个游戏对象 (InfoBox) 带有..
- 垂直布局组(所有边距 20,控制子尺寸高度激活)
- 一张图片
- a 内容大小适配器(垂直适合设置为首选大小,水平不受约束)
此信息框内是一个文本元素,每次更新文本时,我都希望信息框展开或折叠,但仅限于底部。现在我的 InfoBox 总是在顶部和底部展开或折叠,但我不希望这种情况发生。我怎样才能做到这一点?我添加了一些屏幕截图以更好地形象化这一点。
这些是我对信息框的设置:
这些是我对文本的设置:
这就是当我使用更少的文本时发生的情况,框从底部和顶部折叠,但我希望它固定在顶部(与旁边的绿色框在同一行)并且仅在底部折叠:
非常感谢任何帮助!
你的主要问题看起来你也在 parent object 上使用了 ContentSizeFitter
。所以这取决于这个 parent object 如何与其对应的 parent.
我知道这句话听起来很奇怪,但你所做的基本上是将对齐责任转移到 parent。
=> 使您的 UI 元素与顶部对齐并向下增长。
为此你需要做的就是设置
- 最小锚点 ->
1
- 锚最大 y ->
1
- y 轴 ->
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;
}
}