Layout组件功能问题

对Layout经常会有这样的需求“垂直分布模式里,我往里面扔不同的东西,希望它能自动识别我每次扔进去的Prefab的高度,然后自动收尾相接的方式来展示”,不知道这个该怎么实现,如果设置SpacingY会让两个物体间距一样,这样如果我往里扔不同高度的东西,就没法紧密排版了,还有,如果我用的是Label的话,设置resizeHight,我不知道这段文字加入后这个label的高度是多少,不用layout去计算label的height让后设置pos也很困难。希望官方能扩充一下layout的功能。另外,我看到另个帖子里也说有自动横向居中对齐和纵向居中对齐的需求,我觉得这个需求也很重要,这样我往layout里扔一堆不同的东西,他能自动紧凑排版并且能居中对齐。希望官方能考虑下这个特性或者有其他实现方式望指点

Layout 获取子节点的尺寸时,不会递归获取孙子节点的尺寸,你需要自己写脚本把孙子节点的尺寸同步到子节点,或者在编辑器里设置好 Prefab 的尺寸。

看不懂你的问题在哪

本来就支持,所有节点的 anchor 默认是 0.5 ,这就是居中的。

具体例子,我要做一个label的Prefab,overflow设置成resizeHeight模式,由于动态生成我不知道放进去的文字是多少,就不知道这个Prefab的高度是多少,如果往layout中放的话,假设我设置layout的spacingY为100,而label单行文字为100,这样当我动态生成10个Prefab,其中五个高度是100,五个高度是200,那么放在layout中,高度为200的Prefab的下行文字会被挡住。
我想要layout的addChild实现的效果是,我动态生成这个Prefab不管高度是100还是200,都能与上一个添加进去的Prefab收尾相接,这样不会有部分文字被遮挡

1赞

和我前面说的不违背啊,如果你的 label 放在 Prefab 根节点,那没问题 layout 能识别到。如果你的 label 放在 prefab 子节点,那你需要自己监听 label node 的 size-changed 事件并且同步刷新 prefab 的 size,这样就没问题了。

建议 @zilong 针对这个常见问题完善一下手册或 API 文档

识别label的高度只是问题之一,即使能识别,因为layout给每个放进去的item分配的高度是spacingY,如果我放进layout的item高度不统一,那么必然带来item之间的叠加问题吧?

谁说 item 高度需要统一的……

单行文字高度48,我设置的layout的spacingY高度也是48,所以前四行因为是单行文字就显示很正常,而第六行由于第五行是两行文字的label导致他的高度为96,这使得第五个label和第六个label的文字出现了重叠。如果我把layout的spacingY设置的更大,这是可以让文字不重叠,但也会导致单行文字行距看起来过宽,而到底几行文字是不确定的,我想实现的效果是文字能紧凑排版,不知这个问题怎么解决呢?

我前面回答过两次了,你认真看下行吗?

1赞

饿,我不太能理解你说的回答了是什么意思,我想知道我需要实现的效果怎么解决,能给出解决我遇到的问题的方案吗?

@zilong 文档里写一下吧,或者 @Knox 加个 example

不好意思啊,我反复看过的你回答了,主要解答的内容是能够获取Prefab的高度,这个问题我已经理解了。我配图那个问题的核心是layout的spacingY是一个固定值,会导致不管你往layout中加的item的高度是多少,在layout中占据的位置的高度始终是spacingY,如果加入的item的高度超过spacingY就会出现与相邻item重叠的问题。是我对layout的spacingY的理解有误呢,还是这个确实没法解决呢?我想要的效果是往设计为TYPE VERTICAL的layout加入不同高度的item,使得不同的item在layout中占据item自身高度的height,而不是spacingY设置的高度。希望能仔细看看我对问题的描述,也感谢您的回答,你前面的回答我反复看过才提出后面的问题的。

不是的,spacing 是间距,两者之间的最小距离。

1赞

不好意思,可能之前记忆有误吧,刚刚仔细测试了一下,spacingY确实是item之间的间距,之前一直以为是item的锚点之间的间距,没问题了,谢谢解惑