Xamarin.ios 单触式对话框。在屏幕上任何已定义位置的节

Xamarin.ios 单触式对话框。在屏幕上任何已定义位置的节,xamarin.ios,monotouch.dialog,Xamarin.ios,Monotouch.dialog,考虑一下这样的情况: new RootElement ("Root"){ new Section ("Section A") { new EntryElement("Element in A") } new Section ("Section B") {

考虑一下这样的情况:

new RootElement ("Root"){
                          new Section ("Section A") {
                            new EntryElement("Element in A")
                          }
                          new Section ("Section B") {
                            new EntryElement("Element in B")
                          }
}

对话框将创建包含两个部分的TableView。现在,我希望第二部分不是位于第一部分的正下方,而是位于屏幕的最底部。我怎样才能做到这一点呢?

我不相信MonoTouch。对话框可以做到这一点。您需要:

  • 定义一个大的透明UITableViewCell子类
  • 定义一个“Element”子类,并重写它的GetCell(…)方法,以提供上面的子类单元格
  • 在上面的元素上实现IElementSizing,并实现GetHeight(…)来描述第一个和最后一个单元格之间透明单元格的高度
  • 在顶部EntryElement和底部EntryElement部分之间创建一个带有Element子类的空部分
  • 生成的代码如下所示:

    this.Root = new RootElement ("Root") {
        new Section ("Section A") {
            new EntryElement("Element in A")
        }
        new Section("") {
            new EmptyElement()
        }
        new Section ("Section B") {
            new EntryElement("Element in B")
        }
    };
    
    lastSection.HeaderView = new UIView(new RectangleF(0,0,0,80));
    

    似乎您可以通过为节定义空HeaderView来欺骗Monotouch.Dialog。它将扩展节之间的空间。大概是这样的:

    this.Root = new RootElement ("Root") {
        new Section ("Section A") {
            new EntryElement("Element in A")
        }
        new Section("") {
            new EmptyElement()
        }
        new Section ("Section B") {
            new EntryElement("Element in B")
        }
    };
    
    lastSection.HeaderView = new UIView(new RectangleF(0,0,0,80));
    

    我不确定这是否是正确的方法。为我工作

    我想你必须破解MT.D的来源才能做到这一点。这是一个非常极端的边缘情况,我不希望MT.D能够处理。实际上,我通过定义section的HeaderView来欺骗MTD,比如:lastssection.HeaderView=newuiview(newrectanglef(0,0,0,80));