在 Monotouch 对话框部分隐藏元素 - 高度不变

Hiding Elements in a Monotouch Dialog Section - Height does not change

我有一个包含 5 个元素的 Monotouch 对话框部分。

当条件为真时,我需要隐藏元素 1-4 并显示元素 5。当条件为假时,我需要显示元素 1-4 并隐藏元素 5。

Elements 消失了,但是 Section 高度没有改变。我已经在 DialogViewController 上尝试了所有常用方法,例如 ReloadDataReloadTableViewReload

我能看到的唯一会导致高度改变的方法是 RemoveRange 在部分上,我不想添加和删除元素

如何在元素隐藏时关闭部分?

更新

找到隐藏 Monotouch Dialog (MT D) 元素并更改其高度的更好方法。

创建自定义 class 继承自您正在使用的 MT D 元素

public class DateElement : CrossUI.Touch.Dialog.Elements.DateElement, IElementSizing

并实现 IElementSizing 接口的 GetHeight

public nfloat GetHeight(UITableView tableView, Foundation.NSIndexPath indexPath)
{
    if (this.Visible == false)
    {
        return 0;
    }
    else
    {
        return 44.0f;
    }
}

只要 DialogViewController 被标记为具有 UnevenRows,实现 IElementSizing 的元素就会调用它们的 GetHeight。当元素不可见时简单地 return 0.

一些元素已经实现了 GetHeight,因此您可以在元素可见时调用基本实现。其他时候你将不得不自己实施一些东西。这可以是硬编码固定大小或测量标题和详细信息文本。

我可以 "hide and show" 元素的唯一方法是在需要时删除和插入元素。

我们正在使用 MVVMCross,我绑定到 ViewModel 属性 来控制可见性。现在我正在使用 MvxPropertyChangedListener 并监听之前绑定的相同 属性。

现在,当 属性 发生变化时,我会调用 Section 上的 Remove 和 Insert 方法。不是我想要的,但它有效。