三种方法 解决 scrollView在content修改后无法将scrollBar设为0/1的问题

有个ScrollView
ScrollView

当其中的content被修改后(且有scrollbar 存在时)如果我们直接

public void changeContent(string newTextString){
	content.text=newTextString;
	scBar.value=0f;
}

这时候这个scrollView不会被拉到最下面(或最上面) 很多时候会停到中间
我猜想是因为content的大小还没有真正地 被content size fitter修改
网上有的说加一句

yield return WaitForEndOfFrame();

在我这里没有解决问题 但很多人说可以 所以你也可以试试

我解决的办法是真的“等一下”它刷新
像这样

public void changeContent(string newTextString){
    content.text=newTextString;
    Invoke("helper", 0.1f);
}
public void helper(){
	scBar.value=0f;
}

在今天之前是ok的但是我新创造的一个scrollView上不知道为什么这样也不行
奇怪母亲给奇怪开了门了属于是
总之
有个我目前感觉绝杀的办法 很简单
rect Transform
把Rect Transform的Pivot Y 改成0就好了

虽然不知道为什么 但就是管用
希望有大神能帮我解释其科学原理

好的我错了以上这种方法的问题凸显出来了
比如说每次我想让改变后的content靠最上面 把最下面一行字露出来
我就得把Pivot Y设为0 但这样的结果就是只有几行的时候所有字都贴在下面
非常奇怪

那么只好再找办法
因祸得福我也多少发现了这个问题的起源
来自于ScrollRect的LateUpdate里面

if (m_ViewBounds != m_PrevViewBounds || m_ContentBounds != m_PrevContentBounds || m_Content.anchoredPosition != m_PrevPosition)
  {
      UpdateScrollbars(offset);
      UISystemProfilerApi.AddMarker("ScrollRect.value", this);
      m_OnValueChanged.Invoke(normalizedPosition);
      UpdatePrevData();
  }

每次lateUpdate都会UpdateScrollbars(offset);而这个就会把scrollBar的size以及value调整到“合适的”大小 很多时候都不是我们想要的位置
而且由于是lateUpdate 很难用我的代码去覆盖掉

所以只好绕过去
怎么搞呢
加一个这个

private bool zeroing=true;
	public void changeContent(string newTextString){
		content.text=newTextString;
		zeroing = true}

    public void chasing()
    {
        if (zeroing == true)
        {
            scBar.value = 0;
            zeroing = false;
        }

    }

并且把chasing放在scrollRect的onValueChange里面让它在lateUpdate时call我们的chasing()
onValueChange
注意是放在scrollRect的onValueChange里 我这里的是我重载过取消了普通拖拽的scrollRect Plus版本

不知道为什么Unity设计的时候要每次刷新value而且这个value还不能设定
anyway 我们用这个方法就绕过去了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值