【问题标题】:Unity3D ScrollView dynamic widthunity3D ScrollView 动态宽度
【发布时间】:2019-02-18 11:12:36
【问题描述】:

我的 Canvas 中有一个 ScrollView,它将在运行时填充一个 UI 游戏对象(面板)。因为这个动态孩子没有固定大小,所以我想将我的 ScrollView 调整为与孩子相同的宽度。换句话说:ScrollView 应该是它的孩子的宽度。

我认为这无需编码就可以实现,但我无法让它正常工作。

我已经尝试将 Content Size Fitter 添加到 ContentViewportScrollView,但这只会导致宽度为 0 .

我的结构如下

如果您需要更多信息,请告诉我

编辑 1:

似乎问题出在 GameObject Content 上。它不会用它的子元素调整大小

【问题讨论】:

  • Layout is Unity 有点复杂,但你可以从 Content Size Fitter 开始。理论上它应该做你想做的事,但这取决于许多因素。
  • 应该提到我尝试使用 Content Size Fitters 但这会导致 ScrollView 的宽度为 0
  • 在您的孩子身上放置一个布局元素可能会有所帮助。您需要为您的孩子填写“首选/最小尺寸”。
  • 你不应该让内容在 x 和 y 方向上“拉伸”,因为这样它总是会根据父对象而不是子对象使用锚点

标签: c# unity3d


【解决方案1】:

唯一应该拥有 ContentSizeFitter 的对象是滚动视图的内容(仅在您希望内容展开的轴上)。为了正常工作,最好还有一个垂直或水平布局组,选中复选框“子控件大小”,并取消选中“扩展”。 剩下要做的就是确保内容对象的所有子对象都具有具有首选布局大小的 LayoutElement。

最初几次正确处理可能有点棘手,但绝对有可能。添加组件的顺序有些重要:确保首先在子项中设置 layoutElements,然后添加布局组,只有在它正常工作后才添加内容大小调整器。如果你反其道而行之,它往往会逃跑,就像你在你注意到之前将对象的大小调整为 0 一样

【讨论】:

  • 但是如果我理解正确的话,ScrollView 不会自动调整它的宽度来适应它的孩子的宽度,是吗?
  • scrollview 使用 Mask 裁剪视图,并且通常与屏幕相关联(您不希望滚动视图作为对象从用户的角度增长)。你要调整的是滚动视图的内容,这样你就有更多的内容可以滚动。
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多