2017-02-15 18 views
1

У меня есть выпадающий список на фильтровальную панель, которую нужно растянуть динамически по размеру содержимого, как показано:Unity Resizing Dropdown Динамически

enter image description here

Я попытался несколько монтажников размера контента, но не может найти что-либо, если возможно, я хотел бы установить максимальную ширину он может расширяться затем обрезает все больше времени, чем это, я также хотел бы его расширить только вправо с правой точки поворота. Я нашел аналогичный пример: https://forum.unity3d.com/threads/resize-standard-dropdown-to-fit-content-width.400502/

Спасибо!

ответ

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.

Наконец-то мы хотим, чтобы более длинные предметы были отрезаны красиво.

Дайте каждому выпадающему объекту 2D-компонент Rect Mask (Component -> UI -> Rect Mask 2D). Объект шаблона существует в иерархии сцены до запуска игры, просто отключен. Вы можете просто добавить компонент в родительское преобразование, то есть с изображением (так что текст обрезается).

Вам необходимо убедиться, что маска покрывает ту же ширину, что и графическая картинка, и расширяется вместе с ней, возможно, немного короче по направлению X, поэтому текст обрезается до рисования границы изображения. Это должно происходить автоматически, но вам нужно будет проверить и, возможно, внести некоторые изменения в объект шаблона. В качестве альтернативы вы можете использовать маску изображений, но вам придется играть с ней самостоятельно, но это позволит непрямоугольную обрезку.

Вот и все!