具有动态间距的滚动视图

时间:2016-10-09 15:42:34

标签: unity3d

我正在尝试创建一个带有文本和按钮的可滚动对话框。如果对话框的内容高于滚动视口,我希望所有内容都在视口顶部对齐。如果所有内容都能够在视口中放入而不滚动,我希望它在视口的中心对齐。

Img1

Img1:如果内容可以放在滚动视口中,内容应如何在中心垂直对齐的示例。

Img2

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.然后,当我分配新的文本值时,与大小相关的属性的值来自我指定的第一个文本值。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我将Content元素中的pivot的y值从1更改为0.5。现在,Unity在必要时进行中心处理,并在必要时进行顶部对齐,而无需弄清楚如何使代码工作。