如何在重新加载单元格时避免uitableview单元刷新闪烁

时间:2014-09-11 04:56:45

标签: uitableview monotouch.dialog

我使用monotouch.dialog开发了一个PrivateMsg对话屏幕。但是当我重新加载细胞时,细胞闪烁,如何避免呢?

在2步中添加新的pm msg:1。附加元素单元格:State.Insert(msg is sending)=> 2.重新加载元素单元格状态:State.Updated(msg send sucessced)

请找到附件:屏幕录制文件和源代码:

enter image description here

    void HandleOnPMChanged(object sender, PMChangedEventArgs e)
    {
        if (e.PMSID != this.mPMSession.PMSID)
            return;

        this.BeginInvokeOnMainThread(() =>
        {
                    if (e. State == State.Insert) //step1
                    {
                        element = this.GetNewPMElement(itemData);
                        pmSection.Add(element);
                        this.ScrollToBottomRow();  
                    } else if (e.State == State.Update && e.PM != null) //step2
                    {
                        var element = FindElement(e.PM.Guid.GetHashCode());
                        if (element != null)
                        {
                            var indexPaths = new NSIndexPath [] { element.IndexPath };
                            this.TableView.ReloadRows(indexPaths, UITableViewRowAnimation.None);  //this line will flicker 
                            //remark: this.ScrollToBottomRow();
                        }
                    }
                    else if (e. State == State.Insert)
                    {
                        element = this.GetNewPMElement(itemData);
                        pmSection.Add(element);
                        this.ScrollToBottomRow();  //step1
                    }
         });
    }



    public void ScrollToBottomRow()
    {
        try
        {
            if (pmSection.Count < 1)
                return;

            NSIndexPath ndxPath = pmSection[pmSection.Count - 1].IndexPath;
            if (ndxPath != null)
                this.TableView.ScrollToRow(ndxPath, UITableViewScrollPosition.Bottom, false);  //Bottom, false);
        }
        catch (Exception ex)
        {
            Util.ReportMsg("PMDVC ScrollToBottomRow Exception:", ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:1)

问题已修复。

EstimatedHeight返回大于实际值。