Unity动态调整下拉列表

时间:2017-02-15 10:58:27

标签: unity3d drop-down-menu width

我在过滤器面板上有一个下拉列表,需要动态拉伸以适合内容,如下所示:

enter image description here

我已经尝试了几个内容大小的装配工但找不到任何东西,如果可能的话我想设置一个最大宽度它可以扩展然后截断所有更长的东西,我也希望它只扩展到右边的右边中心点。我在这里找到了一个类似的例子:https://forum.unity3d.com/threads/resize-standard-dropdown-to-fit-content-width.400502/

谢谢!

1 个答案:

答案 0 :(得分:0)

好。让我们从Unity论坛帖子的代码开始。

var widest = 0f;
foreach (var item in _inputMines.GetComponentsInChildren<Text>()) {
    widest = Mathf.Max(item.preferredWidth, widest);
}
_inputMines.GetComponent<LayoutElement>().preferredWidth = widest + 40;

我们希望允许最大宽度,因此任何超过此长度的内容都将被截断。因此,让我们添加该变量:

var maxWidth = 250f;
//or whatever value; you may wish this to be a property so you can edit it in the inspector

var widest = 0f;
foreach (var item in _inputMines.GetComponentsInChildren<Text>()) {

现在我们使用两个宽度值的较小然后将其应用于内容布局:

}
widest = Mathf.Min(maxWidth, widest);
_inputMines.GetComponent<LayoutElement>().preferredWidth = widest + 40;

应保留+40,因为它处理滚动条。应选择您的maxWidth值来解释此问题。

最后,我们希望更长的项目能够很好地切断。

为每个下拉项目提供一个Rect Mask 2D组件(Component - &gt; UI - &gt; Rect Mask 2D)。在运行游戏之前,模板对象存在于场景层次结构中,只是禁用。您只需将组件添加到父变换,即具有图像的变换(因此文本被剪切)。

您需要确保遮罩覆盖与图像图形相同的宽度并随之展开,可能在X方向上稍微缩短,以便在绘制图像边框之前剪切文本。这应该会自动发生,但您需要检查并可能对模板对象进行一些更改。或者你可以使用一个图像蒙版,但是你必须自己玩那个,但它会允许非矩形剪辑。

那就是它!