我正在尝试创建一个带有文本和按钮的可滚动对话框。如果对话框的内容高于滚动视口,我希望所有内容都在视口顶部对齐。如果所有内容都能够在视口中放入而不滚动,我希望它在视口的中心对齐。
Img1:如果内容可以放在滚动视口中,内容应如何在中心垂直对齐的示例。
Img2:如果内容太大而不能全部适合滚动视口,内容应如何在顶部垂直对齐的示例。
这是我画布的结构
Canvas
|
|---Scroll View (contains Scroll Rect component)
|
|---Viewport
| |
| |---Content (contains Vertical Layout Group, Content Size Fitter)
| |
| |---Text (contains Horizontal Layout Group component)
| |
| |---Button (contains Horizontal Layout Group component)
| | |
| | |---Text
| |
| |---Text (contains Horizontal Layout Group component)
|
|---Scrollbar Vertical
我试图通过动态计算附加到Vertical Layout Group
元素的Content
中的填充来处理垂直定位。当所有内容都应该是顶部对齐时,我将填充设置为10.当所有内容都应居中对齐时,我会确定每个UI元素的高度并相应地设置填充以使所有内容都显示为中心。
对话框的文本由SetText
方法设置,该方法是附加到画布的脚本的一部分。 SetText
为对话框中的每个控件分配文本,然后执行所有填充计算。
问题是Unity在分配文本后似乎没有立即计算每个控件的尺寸。例如,如果我在第一次将文本分配给Text
控件之一后在代码中设置了断点,则所有与大小相关的属性仍为0.然后,当我分配新的文本值时,与大小相关的属性的值来自我指定的第一个文本值。
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
我找到了解决方案。我将Content
元素中的pivot的y值从1更改为0.5。现在,Unity在必要时进行中心处理,并在必要时进行顶部对齐,而无需弄清楚如何使代码工作。