无论 child 的长度如何,VLG 组件都不会扩展
The VLG component does not expand regardless of the length of the child
这是我在 Unity 场景中的层次结构:
- 垂直布局组
- 滚动视图(水平)
- 文本(很长)
我将图形设置为在纵向模式下与移动设备屏幕完美配合。但是当我在平板电脑上使用图形时,或者当我旋转设备时,我必须放大元素,所以问题就出现了。
我找不到正确的展开元素的方法,我想垂直布局组中有很多ScrollView,我希望能够水平滚动查看里面的文本,这就是我要问的。
这个问题解释起来比较复杂,我用三种不同的方式来解释(说的是同一件事,所以看起来很相似),你选择你更容易理解的一种:
解释 1
Vertical Layout Group 自主展开,覆盖了大部分屏幕。
当我必须决定如何放大 ScrollView 时,问题就出现了,我无法使用锚点,因为它们已被垂直布局组取代,而且我无法使用“控制 Child 大小”和“ Child Force Expand”选项,因为如果里面的文本组件更长,它会扩展到 Vertical Layout Group 之外,从而使 Scroll 无用。
我希望 ScrollView 仅在 Vertical Layout Group 的范围内扩展,因此不受内部文本组件长度的影响(以便我可以滚动它)(PS。我不能使用布局元素,因为文本可以水平和垂直变化,并且因为 ScrollView 配备了另一个垂直布局组(我需要它来管理文本的垂直发展,如果它想在高度上扩展))
解释 2
我希望 ScrollView 水平扩展,直到它触及 Vertical Layout Group 的限制。
我可以通过启用“Control Child Size”和“Child Force Expand”来做到这一点。
但是,我还想要一件事,那就是 ScrollView 不会超出 Vertical Layout Group 的限制。当文本组件(可变大小)比垂直布局组的长度长时会导致此问题。
因此,我希望 ScrollView 扩展到 Vertical Layout Group,而不受 child 大小的影响。
解释 3
为了看起来更清晰,为了将 ScrollView 扩大到 VLG 的极限,我必须同时启用“控制 Child 大小”和“Child 强制展开”(我不能使用锚点,因为它是用自己的替代它们的相同 VLG),但是放置“控制 Child 大小”,如果 child 文本比 VLG 长,它会使 ScrollView 放大(而且我不希望这种情况发生!否则,如果 ScrollView 与其组件一样长,那将毫无意义!我希望 ScrollView 延伸到 VLG 的限制,但不要超过它们!)
我可能误解了这个问题,但仅通过更改 ScrollView 的锚点以适应垂直布局组(不需要“控制子尺寸”和“子强制展开”)就可以解决这个问题吗:
使用锚点拉伸以适应父对象:
经过说明,我相信我明白你想达到什么目的了。如果这不是您想要的,请更正我的实现,以便我可以正确回答问题。
这是我设置的层次结构。
这是使用当前设置的 UI。
由于 UI 相当广泛,如果您在运行时进行任何更改,并且碰巧更改了文本的长度,则需要调用重新构建布局。滚动不会在单个更新周期内正确更改。要在运行时更新它,您可以在传递适当的 RectTransform
以进行重建时调用 LayoutRebuilder.ForceRebuildImmediate
。
在 VLG 中启用“控制 Child 大小”和“Child 强制扩展”使滚动视图依赖于 child 的长度。但是,通过在 ScrollView 的附加 VLG 中启用“Control Child Size”,问题就消失了。实际上,ScrollView 的停止取决于child,所以是它控制,而不是被控制。
这是我在 Unity 场景中的层次结构:
- 垂直布局组
- 滚动视图(水平)
- 文本(很长)
- 滚动视图(水平)
我将图形设置为在纵向模式下与移动设备屏幕完美配合。但是当我在平板电脑上使用图形时,或者当我旋转设备时,我必须放大元素,所以问题就出现了。
我找不到正确的展开元素的方法,我想垂直布局组中有很多ScrollView,我希望能够水平滚动查看里面的文本,这就是我要问的。
这个问题解释起来比较复杂,我用三种不同的方式来解释(说的是同一件事,所以看起来很相似),你选择你更容易理解的一种:
解释 1
Vertical Layout Group 自主展开,覆盖了大部分屏幕。
当我必须决定如何放大 ScrollView 时,问题就出现了,我无法使用锚点,因为它们已被垂直布局组取代,而且我无法使用“控制 Child 大小”和“ Child Force Expand”选项,因为如果里面的文本组件更长,它会扩展到 Vertical Layout Group 之外,从而使 Scroll 无用。
我希望 ScrollView 仅在 Vertical Layout Group 的范围内扩展,因此不受内部文本组件长度的影响(以便我可以滚动它)(PS。我不能使用布局元素,因为文本可以水平和垂直变化,并且因为 ScrollView 配备了另一个垂直布局组(我需要它来管理文本的垂直发展,如果它想在高度上扩展))
解释 2
我希望 ScrollView 水平扩展,直到它触及 Vertical Layout Group 的限制。 我可以通过启用“Control Child Size”和“Child Force Expand”来做到这一点。
但是,我还想要一件事,那就是 ScrollView 不会超出 Vertical Layout Group 的限制。当文本组件(可变大小)比垂直布局组的长度长时会导致此问题。
因此,我希望 ScrollView 扩展到 Vertical Layout Group,而不受 child 大小的影响。
解释 3
为了看起来更清晰,为了将 ScrollView 扩大到 VLG 的极限,我必须同时启用“控制 Child 大小”和“Child 强制展开”(我不能使用锚点,因为它是用自己的替代它们的相同 VLG),但是放置“控制 Child 大小”,如果 child 文本比 VLG 长,它会使 ScrollView 放大(而且我不希望这种情况发生!否则,如果 ScrollView 与其组件一样长,那将毫无意义!我希望 ScrollView 延伸到 VLG 的限制,但不要超过它们!)
我可能误解了这个问题,但仅通过更改 ScrollView 的锚点以适应垂直布局组(不需要“控制子尺寸”和“子强制展开”)就可以解决这个问题吗:
使用锚点拉伸以适应父对象:
经过说明,我相信我明白你想达到什么目的了。如果这不是您想要的,请更正我的实现,以便我可以正确回答问题。
这是我设置的层次结构。
这是使用当前设置的 UI。
由于 UI 相当广泛,如果您在运行时进行任何更改,并且碰巧更改了文本的长度,则需要调用重新构建布局。滚动不会在单个更新周期内正确更改。要在运行时更新它,您可以在传递适当的 RectTransform
以进行重建时调用 LayoutRebuilder.ForceRebuildImmediate
。
在 VLG 中启用“控制 Child 大小”和“Child 强制扩展”使滚动视图依赖于 child 的长度。但是,通过在 ScrollView 的附加 VLG 中启用“Control Child Size”,问题就消失了。实际上,ScrollView 的停止取决于child,所以是它控制,而不是被控制。