在Monotouch对话框中隐藏元素 - 高度不会改变

时间:2015-06-08 18:07:36

标签: xamarin.ios monotouch.dialog

我有一个带有5个元素的Monotouch对话框。

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

元素消失但截面高度不会改变。我在DialogViewController上尝试了所有常用的操作,例如ReloadDataReloadTableViewReload

我能看到的唯一可以导致高度变化的方法是节上的RemoveRange,我不想添加和删除元素

当元素被隐藏时,如何让该部分关闭?

1 个答案:

答案 0 :(得分:2)

更新

找到一种隐藏Monotouch Dialog(MT D)元素的更好方法,并让它们的高度发生变化。

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

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

实现IElementSizing Interface的GetHeight

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

只要DialogViewController被标记为具有UnevenRows,实现IElementSizing的元素就会调用其GetHeight。当元素不可见时,只需返回0.

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

我唯一可以隐藏和展示的方式。元素是在需要时删除和插入元素。

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

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