我有一个包含 5 个元素的 Monotouch 对话框部分。
当条件为真时,我需要隐藏元素 1-4 并显示元素 5。当条件为假时,我需要显示元素 1-4 并隐藏元素 5。
Elements 消失了,但是 Section 的高度没有改变。我已经在 DialogViewController 上尝试了所有常用方法,例如 ReloadData
、ReloadTableView
和 Reload
。
我能看到的唯一会导致高度改变的方法是 Section 上的 RemoveRange
,我不想添加和删除元素
当元素被隐藏时,我如何让该部分关闭?
最佳答案
更新
找到了隐藏 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,因此您可以在元素可见时调用基本实现。其他时候你将不得不自己实现一些东西。这可以是硬编码固定大小或测量标题和详细信息文本。
我可以“隐藏和显示”元素的唯一方法是在需要时移除和插入元素。
我们正在使用 MVVMCross,我绑定(bind)到 ViewModel 属性来控制可见性。现在,我正在使用 MvxPropertyChangedListener
并监听之前绑定(bind)的同一属性。
现在,当属性更改时,我会调用 Section 上的 Remove 和 Insert 方法。不是我想要的,但它有效。
关于xamarin.ios - 在 Monotouch 对话框部分隐藏元素 - 高度不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30716118/