我正在使用Alxandr创建的最新版本(2012年2月)。
我正在尝试使用与添加EntryElement相同的技术将其添加到某个部分。 MultilineEntryElement添加到该部分,但接收单元格不会扩展超过其默认大小。然后MLEE将覆盖以下部分。我希望它默认为全屏宽度和10行长。这样做的最佳方式是什么?
谢谢! 马特
答案 0 :(得分:3)
要解决此问题,请将RootElement的UnevenRows属性设置为true,如下所示:
var r = new RootElement ("foo") { ... }
r.UnevenRows = true;
答案 1 :(得分:0)
我对这个问题做了一些研究。请注意 - 我正在使用我自己的MultilineEntryElement实现,这可能与其他人有点不同。
首先,值得指出的是,在“简单”场景中我没有体现到这个问题 - 其中MultilineEntryElement放置在作为RootElement初始创建的一部分创建的部分内。只有当我操作已经由DialogViewController呈现的现有RootElement时,才会出现此问题。
似乎MonoTouch.Dialog计算行大小的方式存在错误。如果一个元素实现了IElementSizing,那么MT.D将调用其GetHeight()重载。一旦MT.D检测到具有“不规则”高度的元素,它似乎需要在每次处理对封闭部分的更改时调用此方法。这可能很昂贵......所以如果MT.D布局了一个RootElement并且没有找到实现IElementSizing的元素,那么看起来(可能是作为一种优化?)MT.D将为任何元素提供IGNORE IElementSizing信息添加了POST初始渲染。因此,CELL的RowHeight属性将返回标准行高,MultilineEntryElement将呈现溢出其下方单元格的UITextView。
我提出的解决方法是创建一个名为DummyElement的简单元素,它实现IElementSizing并为GetHeight()返回0,并在初始布局发生之前将其添加到初始RootElement。如果你这样做,MT.D将注册有一个具有不规则高度的元素,并在稍后将其添加到元素“DOM”时调用MultilineEntryElement上的GetHeight()方法。
这是DummyElement的最小impl,以防它有用:
public class DummyElement : Element, IElementSizing
{
public DummyElement() : base ("empty")
{
}
public float GetHeight (UITableView tableView, NSIndexPath indexPath)
{
return 0;
}
}