热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#–在内容大小调整器更新内容的Rect变换后,如何让UnityScrollRect滚动到底部?

我有一个垂直滚动视图,我想动态添加内容.为了做到这一点,我将ContentSizeFitter组件和VerticalLayoutGroup组件附加到Content游戏对象,这样每当

我有一个垂直滚动视图,我想动态添加内容.为了做到这一点,我将Content Size Fitter组件和Vertical Layout Group组件附加到Content游戏对象,这样每当我将新游戏对象实例化为它的子对象时,它的Rect Transform将自动增长.如果滚动条已经在底部,我想在底部添加新对象后将滚动条保持在底部.所以我这样做:

if ( scrollRect.verticalNormalizedPosition == 0 )
{
isAtBottom = true ;
}
ScrollViewItem item = Instantiate( scrollViewItem, scrollRect.content ) ;
if ( isAtBottom )
{
scrollRect.verticalNormalizedPosition = 0 ;
}

但是,这不起作用,因为新设置的滚动视图项在我将verticalNormalizedPosition设置为零时没有增加Rect Transform的大小.因此,当最终更新Rect Transform时,滚动到底部为时已晚.

为了说明,假设我的内容是400像素高,滚动条一直在底部.现在我添加一个高100像素的对象.然后我将滚动条发送到底部,但它仍然认为内容是400像素高.然后内容大小更新为500像素,但滚动条下降400像素,因此它只有80%的下降而不是100%.

有两种方法可以解决这个问题.我想要一种强制内容大小Fitter立即更新的方法或者作为事件响应Content Size Fitter更新的方法.

通过研究和实验,我几乎成功地通过将这些行按照这个确切的顺序放在第一个选项中:

Canvas.ForceUpdateCanvases();
scrollRect.content.GetComponent().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;

但是,它并没有完全滚动到底部.它总是大约20像素.所以我想知道是否还有一些布局操作我不会强迫发生.也许这是填充物或其他东西.

解决方法:

好的,我相信我已经明白了.在大多数情况下,Canvas.ForceUpdateCanvases();在将verticalNormalizedPosition设置为零之前,您需要做的就是.但就我而言,我添加到内容本身的项目还有一个Vertical Layout Group组件和一个Content Size Fitter组件.所以我必须按以下顺序执行这些步骤:

Canvas.ForceUpdateCanvases();
item.GetComponent().CalculateLayoutInputVertical() ;
item.GetComponent().SetLayoutVertical() ;
scrollRect.content.GetComponent().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;

围绕这些方法的文档很少,这有点遗憾.


推荐阅读
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 1简介本文结合数字信号处理课程和Matlab程序设计课程的相关知识,给出了基于Matlab的音乐播放器的总体设计方案,介绍了播放器主要模块的功能,设计与实现方法.我们将该设 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • 开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
政儒思贤丽正
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有