Xamarin iOS ViewCellRenderer

时间:2017-10-18 12:36:52

标签: c# uitableview xamarin xamarin.ios xamarin.forms

我尝试自定义UITableViewCell。我这样解释过:Xamarin Customizing a ViewCell

到目前为止一切顺利。 现在我尝试在xib中实现单元格的ui。现在几乎可以工作了。我只有两个问题:

  1. 单元格的行高保持在44。
  2. 如何访问标签等ui元素以更改文字?
  3. 这是我的代码:

    ViewCellRenderer:

    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
    {
      var NativeViewCell = (NativeViewCell)item;
    
      cell = reusableCell as NativeiOSCell;
      if (cell == null)
        cell = new NativeiOSCell(item.GetType().FullName, NativeViewCell);
      else
        cell.NativeViewCell.PropertyChanged -= OnNativeViewCellPropertyChanged;
    
      NativeViewCell.PropertyChanged += OnNativeViewCellPropertyChanged;
      cell.UpdateCell(NativeViewCell);
      tv.RowHeight = 102;
      return cell;
    }
    

    NativeiOSCell:

    public NativeiOSCell(string cellId, NativeViewCell cell) : base(UITableViewCellStyle.Default, cellId)
    {
      NativeViewCell = cell;
      UITableViewCell view = (UITableViewCell) UINib.FromName("Layout1", NSBundle.MainBundle).Instantiate(null, null)[0];
      this.Bounds = view.Bounds;
      ContentView.AddSubviews(view.ContentView.Subviews);
    }
    

2 个答案:

答案 0 :(得分:3)

由于M.D.刚刚创建了ViewCellRenderer而不是ListViewRenderer,我们无法访问GetHeightForRowEstimatedHeight方法。

解决方案1:在ListView上设置RowHeight

<ListView x:Name="listView" RowHeight="100">

解决方案2:将HasUnevenRows设置为True并在ViewCell上设置高度

<ListView x:Name="listView" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <local:NativeCell  Height="100" Name="{Binding Name}" Category="{Binding Category}" ImageFilename="{Binding ImageFilename}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

答案 1 :(得分:0)

检查表的表源,因为问题与您的自定义单元格无关,问题是表源中为默认值分配此值的方法

public override nfloat EstimatedHeight(UITableView tableView, NSIndexPath indexPath)
    {
        return base.EstimatedHeight(tableView, indexPath);
    }

尝试添加类似

的内容
public override nfloat EstimatedHeight(UITableView tableView, NSIndexPath indexPath)
    {
        return 104;
    }

并检查表视图的此值不是自动的,并将自定义单元格的值

enter image description here 我希望这个帮助让我知道。