ViewCell ForceUpdateSize有时无法正常工作

时间:2017-07-04 20:48:46

标签: c# .net xamarin xamarin.android xamarin.forms

我在Xamarin Forms中使用自定义ViewCell,如下所示:

server

我还创建了一种方法来动画ViewCell的崩溃动画,它按预期工作。但是,随着等待的覆盖,每个循环迭代持续时间长达100毫秒而不是1毫秒:

public class NativeCell : ViewCell
{
    public double Height
    {
        get
        {
            return base.Height;
        }
        set
        {
            base.Height = value;
            ForceUpdateSize();
        }
    }
}

所以我做了另一个使用秒表进行等待的方法:

async public void Colapse()
{
    for (double i = Height; i >= 0; i--)
    {
        Height = i;
        await Task.Delay(1);
    }
}

最后一种方法报告等待时间现在通常为1.1ms - 1.3ms。哪个好。但是,高度调整没有做任何事情。或者至少没有触发ForceUpdateSize。

1 个答案:

答案 0 :(得分:0)

我们需要在这里解决一些问题。

  1. 您必须在列表视图中指定HasUnevenRows

  2. 你做不到"加倍i =身高"因为高度将是" -1"

  3. 你最后的功能设置高度使用StopWatch并不是真正的异步,因此在功能退出之前你不会更新UI。

  4. 由于Task.Delay很慢,我们可以使用带有勾号间隔的设备计时器

  5. 以下是我在Android上测试的解决方案。代码在PCL中的ViewCell内部

    int currentHeight;
            public void Colapse()
            {
                currentHeight = (int)this.View.Height;
                Device.StartTimer(new TimeSpan(100), timerTick);
            }
    
            private bool timerTick()
            {
                if (currentHeight <= 0)
                    return false;
                else
                {
                    Height = currentHeight--;
                    ForceUpdateSize();
                    return true;
                }
            }