Unity — средство подбора размера контента работает неправильно с несколькими уровнями ⇐ C#
-
Anonymous
Unity — средство подбора размера контента работает неправильно с несколькими уровнями
У меня есть случай, когда я пытаюсь использовать 3 средства подбора размера контента на 3 разных уровнях, но только самый низкий из них работает правильно.
Вот макет.
ScrollRect |-Панель содержимого: макет вертикальной группы, ширина и высота дочернего принудительного расширения проверены. |- Panel2 — Подбор размера контента, вертикальная подгонка = предпочтительный размер |- Panel3 — Настройка размера контента, вертикальная подгонка = предпочтительный размер |- Text Mesh Pro (многострочный) — Настройка размера контента, вертикальная подгонка = предпочтительный размер Поскольку мне не удалось заставить это работать, я создал простой скрипт и поместил его на Panel2 и Panel3.
[ExecuteInEditMode] общедоступный класс PanelLayoutUpdater: MonoBehaviour { [Сериализефилд] частный GameObject childObject; частная панель RectTransformRectTransform; частный RectTransform childRectTransform; частная ширина поплавка; частное недействительное обновление() { НастроитьВысотуПанели(); } недействительный старт() { PanelRectTransform = GetComponent(); ширина = PanelRectTransform.sizeDelta.x; childRectTransform = childObject.GetComponent(); } недействительный НастроитьPanelHeight() { если (childRectTransform!= ноль) { Vector2 childSize = childRectTransform.sizeDelta; PanelRectTransform.sizeDelta = новый Vector2(ширина, childSize.y + 10f); } } } Проблема этого подхода — время, необходимое для определения размера Контента. После запуска теста я ожидаю, что прямоугольник прокрутки окажется внизу, но каждый раз он оказывается на несколько строк выше нижнего.
частный void Test() { var msg = @"New Text, это будет более длинное сообщение, чтобы увидеть, автоматически ли размеры текстового поля позволяют отображать больше текста. Если это сработает, оно должно изменить размер родительской панели, которая, в свою очередь, должна изменить размер ее родительской панели. панель. Здесь работает установщик размера контента. Это еще работает?"; для (int я = 0; я
У меня есть случай, когда я пытаюсь использовать 3 средства подбора размера контента на 3 разных уровнях, но только самый низкий из них работает правильно.
Вот макет.
ScrollRect |-Панель содержимого: макет вертикальной группы, ширина и высота дочернего принудительного расширения проверены. |- Panel2 — Подбор размера контента, вертикальная подгонка = предпочтительный размер |- Panel3 — Настройка размера контента, вертикальная подгонка = предпочтительный размер |- Text Mesh Pro (многострочный) — Настройка размера контента, вертикальная подгонка = предпочтительный размер Поскольку мне не удалось заставить это работать, я создал простой скрипт и поместил его на Panel2 и Panel3.
[ExecuteInEditMode] общедоступный класс PanelLayoutUpdater: MonoBehaviour { [Сериализефилд] частный GameObject childObject; частная панель RectTransformRectTransform; частный RectTransform childRectTransform; частная ширина поплавка; частное недействительное обновление() { НастроитьВысотуПанели(); } недействительный старт() { PanelRectTransform = GetComponent(); ширина = PanelRectTransform.sizeDelta.x; childRectTransform = childObject.GetComponent(); } недействительный НастроитьPanelHeight() { если (childRectTransform!= ноль) { Vector2 childSize = childRectTransform.sizeDelta; PanelRectTransform.sizeDelta = новый Vector2(ширина, childSize.y + 10f); } } } Проблема этого подхода — время, необходимое для определения размера Контента. После запуска теста я ожидаю, что прямоугольник прокрутки окажется внизу, но каждый раз он оказывается на несколько строк выше нижнего.
частный void Test() { var msg = @"New Text, это будет более длинное сообщение, чтобы увидеть, автоматически ли размеры текстового поля позволяют отображать больше текста. Если это сработает, оно должно изменить размер родительской панели, которая, в свою очередь, должна изменить размер ее родительской панели. панель. Здесь работает установщик размера контента. Это еще работает?"; для (int я = 0; я
Мобильная версия