显示后,在向MonoTouch Dialog RootElement添加元素时会出现奇怪的块

时间:2012-02-26 20:01:55

标签: ios xamarin.ios monotouch.dialog

在我正在构建的应用程序中,我使用以下模式:如果用户单击分层导航元素,我立即打开下一个UIViewController,它会自行加载其数据并显示加载微调器它正在通过网络。

现在大多数列表视图都是使用MonoTouch创建的。在一个DialogViewController上,我有一个问题,即在屏幕显示后向视图RootElement添加许多元素。

首先,StringElements在屏幕上显示正常,但如果您快速上下滚动,则每行上的文字都会成为一个块:

screenshot of the issue at hand

重现问题的代码:

        var root = new RootElement("Root");
        var dvc = new DialogViewController(root) { AutoHideSearch = true, EnableSearch = true };

        nav.PushViewController(dvc, true);

        Task.Factory.StartNew(() => {
                Thread.Sleep(TimeSpan.FromSeconds(1));
            UIApplication.SharedApplication.InvokeOnMainThread(() => {
                var sec = new Section();

                for (int i = 0; i < 100; i++)
                {
                    var el = new StyledStringElement("Test", "Test", UITableViewCellStyle.Value1);
                    sec.Add(el);
                }

                root.Add(sec);
            });
        });

有趣的是,只有左边的字符串看起来像一个块,而右边的那个字符串很好。另外,在他们的MWC(演示)应用程序中,Xamarin created a new RootElement to repopulate the twitter list as well

2 个答案:

答案 0 :(得分:3)

似乎没有重新加载在主线程上调用的数据源以正确呈现新值:

var dvc = new DialogViewController(new RootElement(""));
_root = new UINavigationController();
_root.PushViewController(dvc, true);
_window.RootViewController = _root;

Task.Factory.StartNew(() => {
    Thread.Sleep(TimeSpan.FromSeconds(1));
    var section = new Section("");
        foreach (var i in Enumerable.Range(1, 100)) {
            section.Add(new StyledStringElement(i.ToString(), "cell", UITableViewCellStyle.Value1));
        }

    dvc.Root.Add(section);
    BeginInvokeOnMainThread(() => {
        dvc.ReloadData();
    });
});

答案 1 :(得分:0)

当我在BeginInvokeOnMainThread语句中动态呈现元素时,我确实遇到了同样的问题 如果我在构造函数中加载我的元素,则会阻止UI,但元素将很好地呈现。

并感谢提示dvc.ReloadData也适用于我