我有一个带有5个元素的Monotouch对话框。
当条件为True时,我需要隐藏元素1-4并显示元素5.当它为假时,我需要显示元素1-4并隐藏元素5.
元素消失但截面高度不会改变。我在DialogViewController上尝试了所有常用的操作,例如ReloadData
,ReloadTableView
和Reload
。
我能看到的唯一可以导致高度变化的方法是节上的RemoveRange
,我不想添加和删除元素
当元素被隐藏时,如何让该部分关闭?
答案 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方法。不是我想要的,但它有效。