VLG 组件不扩展无论子项的长度如何

Posted

技术标签:

【中文标题】VLG 组件不扩展无论子项的长度如何【英文标题】:The VLG component does not expand regardless of the length of the child 【发布时间】:2021-10-14 21:26:17 【问题描述】:

这是我在 Unity 场景中的层次结构:

垂直布局组 滚动视图(水平) 文本(很长)

我将图形设置为在移动设备屏幕的纵向模式下完美运行。但是当我在平板电脑上使用图形时,或者当我旋转设备时,我必须放大元素,这就出现了问题。

我找不到正确的展开元素的方式,想在Vertical Layout Group里面放很多ScrollView,想水平滚动查看里面的文字,这就是我要问的。

这个问题很复杂,解释起来很复杂,我用三种不同的方式来解释(谈论的是同一件事,所以它们可能看起来很相似),你选择哪个更容易理解:


解释1

垂直布局组自动扩展,覆盖大部分屏幕。

当我必须决定如何放大 ScrollView 时出现问题,我无法使用锚点,因为它们被垂直布局组替换,并且我无法使用“控制子级大小”和“子级强制展开”选项,因为如果里面的文本组件更长,它会扩展到垂直布局组之外,从而使滚动无用。

我希望 ScrollView 仅在垂直布局组的范围内展开,因此不受内部文本组件长度的影响(以便我可以滚动它)(PS。我不能使用布局元素,因为文本可以水平和垂直变化,并且因为 ScrollView 配备了另一个 Vertical Layout Group(我需要它来管理文本的垂直发展,如果它想在高度上扩展))


解释2

我希望 ScrollView 水平扩展,直到达到垂直布局组的限制。 我可以通过启用“控制子大小”和“子力展开”来做到这一点。

不过,我还想要一件事,那就是 ScrollView 不会扩展超出垂直布局组的限制。当文本组件(可变大小)长于垂直布局组的长度时会导致此问题。

因此,我希望 ScrollView 扩展到垂直布局组,而不受子级大小的影响。


解释3

为了看起来更清晰,要将 ScrollView 扩大到 VLG 的限制,我必须同时启用“控制子大小”和“子力展开”(我不能使用锚点,因为它是相同的 VLG 替换它们有自己的),但是放置“控制子大小”,如果子文本比 VLG 长,它会使 ScrollView 放大(我不希望这种情况发生!否则 ScrollView,如果它是只要它的组件,就没有意义!我希望 ScrollView 伸展到 VLG 的极限,但不要超过它们!)

【问题讨论】:

您需要更详细地解释您尝试过哪些失败的尝试,以便更好地了解您想要什么以及您遇到的问题。检查this 是否有帮助 我添加了一个部分,即使对我来说似乎重复,我希望它有所帮助 您是在问如何将滚动视图动态缩放到垂直布局组的大小?我对你想要的文本组有点困惑。什么应该扩展到什么?在您的示例照片中,您是否只希望滚动扩展到容器但仍然是滚动? 我已经更新了问题,使其更加清晰。我希望 ScrollView 扩展到 VLG 的极限,仅此而已。但是,问题是内部文本很长,如果我启用 VLG 上的选项,则 ScrollView 会扩展到文本的长度,使其无用,因为无法滚动 【参考方案1】:

在 VLG 中启用“Control Child Size”和“Child Force Expand”会使 ScrollView 依赖于孩子的长度。但是,通过在 ScrollView 的附加 VLG 中启用“控制子大小”,问题就消失了。在实践中,ScrollView 停止依赖于孩子,所以它是控制者,而不是被控制。

【讨论】:

【参考方案2】:

在澄清之后,我相信我了解您想要实现的目标。如果这不是您想要的,请更正我的实现,以便我可以正确回答问题。

这是我设置的层次结构。

这是使用当前设置的 UI。

由于 UI 相当广泛,如果您在运行时进行任何更改,如果您碰巧更改了文本的长度,则需要调用以重建布局。滚动不会在单个更新周期内正确更改。要在运行时更新它,您可以调用LayoutRebuilder.ForceRebuildImmediate,同时传入正确的RectTransform 进行重建。

【讨论】:

您的回答对我的情况不正确(这并不意味着它对其他人不正确,我们正在谈论一个复杂的图形问题,我的项目可能会有所不同是正常的),但它帮助我理解了解决方案。因此我给你赏金(感谢你的帮助!),但我必须用我为解决它所做的事情来发布答案。【参考方案3】:

我可能误解了这个问题,但这是否可以通过更改 ScrollView 的锚点以适应垂直布局组来解决(不需要“控制子大小”和“子力展开”):

使用锚点拉伸以适应父对象:

【讨论】:

垂直布局组自动检查和排列子元素的锚点,带有“子元素对齐”选项 @FreeLearning 更清楚一点,能不能关闭垂直布局组上的所有刻度:子控件大小(关闭)、使用子缩放(关闭)、子力展开(关闭)。文本扩展可能与它的设置有关,因此您可能需要查看 Text 组件的水平溢出您想要的图像会有所帮助! 您不能手动编辑 VLG 的子对象的锚点,除非通过 VLG 中的设置。 PS。我添加了一张图片。

以上是关于VLG 组件不扩展无论子项的长度如何的主要内容,如果未能解决你的问题,请参考以下文章

UIToolBar 与 UIBarButtonItems 等间距,无论标题长度如何

获取视频长度

无论图像大小如何,都可以计算固定长度的梯度直方图(HOG)

带有 SWIG 未知长度数组的 NumPy C 扩展

Excel VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)

当队列长度增加时如何扩展微服务(服务结构)实例