Content Size Fitter组件的使用

Content Size Fitter组件主要是用来设置UI的长宽!!!

Horizontal Fit和Vertical Fit两个选择框分别是控制UI的宽和高!!!

每个框有三个值可选:
1、Unconstrained:组件不根据布局元素调整 ,可手动修改长宽的值。
2、MinSize:根据布局元素的最小值来调整,不能手动修改长宽的值。
3、PreferredSize:根据布局元素的内容来调整,不能手动修改长宽的值。
字面意思即可理解

这个组件多用在如下三个方面:
1、在使用ScrollRect组件时,嵌套使用Layout组件,同时使用ContentSizeFitter 组件,与layout组件挂在统一物体上,保证挂在layout组件物体的大小为所有子物体的总和。在Horizontal Fit和Vertical Fit两个选择框选择MinSize或者PreferredSize都可以实现;
2、图片跟随文字移动功能时使用,把图片设置为文字Text的子物体,在Text上挂载Content Size Fitter组件并Horizontal Fit选择PreferredSize选项,图片需要把锚点设置左对齐,当文字发生变化时,挂载了Content Size Fitter的物体的大小会随之发生变化,由于图片锚点左对齐所以图片距离父对象的左边的距离是不变的,当父对象变大时图片随之向右移动;
3、根据按钮以及其他窗口内对象的显隐时时改变窗口大小,窗口最上层为背景层,挂载有layout组件,content size fitter组件,content size fitter需要选中PreferredSize根据不同 的情况选择Horizontal和Vertical。当我们在这个对象上布置按钮等对象时,背景板会自适应大小。
熟悉组件的使用,可以根据不同的功能需求进行使用。

注意:使用这个组件面临着一个刷新问题,它不能同步刷新适配所得到的大小,总会在下一帧执行,我们可以通过LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform) 这个API去手动刷新Content Size Fitter的效果.

例如:
在这里插入图片描述
我们需要在一个scroll view里面,Content的大小随内容的大小变换,同时Content还要使用layout group来使下面保持一定的规格排列,再同时,还需要下面的子物体content1、content2、content3…的大小随自己的子内容来动态改变。这时要在 跟随子内容大小变化的 所有父物体上挂载Content Size Fitter组件,每当子内容变化时调用LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform) 这个API手动刷新(注意,所有跟这次内容变化导致大小产生改变的父物体都要用这个API进行刷新)

    private void ResetContentSizeFitter()
    {
        ContentSizeFitter[] contentArray = m_Content.GetComponentsInChildren<ContentSizeFitter>();
        foreach (var contentChild in contentArray)
        {
            print(contentChild.name);
            LayoutRebuilder.ForceRebuildLayoutImmediate(contentChild.GetComponent<RectTransform>());
        }
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity中ContentSizeFitter的坑: 1. 如果你的RectTransform的宽高都是,那么ContentSizeFitter是不会起作用的。 2. 如果你的RectTransform的宽高都是固定的,那么ContentSizeFitter也是不会起作用的。 3. 如果你的RectTransform的宽高是由父级控件决定的,那么ContentSizeFitter会根据子级控件的大小来自动调整父级控件的大小。 4. 如果你的RectTransform的宽高是由子级控件决定的,那么ContentSizeFitter会根据子级控件的大小来自动调整父级控件的大小,但是如果子级控件的大小超出了父级控件的大小,那么ContentSizeFitter也无法起作用。 5. 如果你的RectTransform的宽高是由子级控件决定的,但是你又想让ContentSizeFitter起作用,那么你需要在子级控件上添加LayoutElement组件,并设置Preferred Width和Preferred Height属性,这样ContentSizeFitter才能根据子级控件的大小来自动调整父级控件的大小。 ### 回答2: 在使用Unity开发UI界面的过程中,可能会用到ContentSizeFitter这个组件。这个组件的主要作用是自动调整UI元素的大小,以适应内容的变化。但是这个组件有很多坑,需要注意。 第一个坑是设置HorizontalAlignment或VerticalAlignment属性时不起作用。 例如,你想让一个文本框垂直居中,可以设置VerticalAlignment属性为Middle。但是在实际使用中,你会发现设置这个属性并不会生效。这是因为ContentSizeFitter组件会自动调整UI元素的大小,导致VerticalAlignment属性失效。 第二个坑是如果ContentSizeFitter的父对象被设置了Layout Group组件,则ContentSizeFitter组件可能会失效。 Layout Group组件用于控制UI元素的排列方式,例如水平排列或垂直排列。但是如果你在ContentSizeFitter的父对象上添加了Layout Group组件ContentSizeFitter组件可能会失效。这是因为Layout Group组件会自动调整UI元素的大小和位置,覆盖了ContentSizeFitter组件的作用。 第三个坑是当ContentSizeFitter组件和Layout Group组件同时存在时,它们的优先级是不确定的。 如果你在ContentSizeFitter的父对象上同时添加了Layout Group组件ContentSizeFitter组件,那么它们之间的优先级是不确定的。有时ContentSizeFitter组件会覆盖Layout Group组件,有时Layout Group组件会覆盖ContentSizeFitter组件,导致UI出现意想不到的结果。 综上所述,虽然ContentSizeFitter组件能够自动调整UI元素的大小,但是在使用过程中需要注意以上三个坑。特别是当ContentSizeFitter组件和Layout Group组件同时存在时,需要保证它们的优先级正确,否则可能会导致UI出现不可预知的问题。 ### 回答3: Unity的ContentSizeFitter组件可以在UILayout组件中的容器元素上设置,用于根据元素的内容自动调整其大小。在使用ContentSizeFitter组件时,有些坑需要注意。本文就对一些常见的ContentSizeFitter的坑进行探讨。 坑一:ContentSizeFitter自适应只考虑本身内容的尺寸 ContentSizeFitter组件的自适应是根据本身的内容来计算尺寸的。如果在ContentSizeFitter组件所在的父级容器的RectTransform组件中设置了具体的尺寸,那么容器将只会根据ContentSizeFitter的内容大小进行缩放。如果父级容器的尺寸和ContentSizeFitter的自适应大小冲突,那么可能会出现内容被裁剪或者缩放错乱的情况。 坑二:ContentSizeFitter和GridLayoutGroup冲突问题 GridLayoutGroup组件可以在父级容器中创建一个网格布局。当GridLayoutGroup组件ContentSizeFitter组件同时使用时,可能会出现布局错乱问题。此时需要在GridLayoutGroup组件ContentSizeFitter组件中选择一个作为主要组件,根据需求进行适当调整。 坑三:ContentSizeFitter和Text组件的冲突问题 在使用ContentSizeFitter组件时,如果元素中包含Text组件,可能会出现Text内容显示不全的问题。此时需要在Text组件中设置Preferred Width或Preferred Height。这样可以避免内容被截断,同时通过ContentSizeFitter组件实现自适应大小。 坑四:ContentSizeFitter和自定义Mesh组件的冲突问题 自定义Mesh组件的渲染方式与Unity预制体的UI组件不同,如果在自定义Mesh组件使用ContentSizeFitter组件,可能会出现布局错乱问题。此时需要根据具体情况进行剪裁操作或调整Mesh组件的大小来保证布局正常。 以上就是一些常见的使用ContentSizeFitter组件时要注意的坑。开发者在使用ContentSizeFitter组件时需要根据具体情况进行适当调整,避免出现尺寸错误或布局混乱的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值