Skip to main content
 首页 » 编程设计

c#之Xamarin iOS ViewCellRenderer

2024年02月27日74rubylouvre

我尝试自定义 UITableViewCell。我这样做就像这里解释的那样:Xamarin Customizing a ViewCell

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

  1. 单元格的行高保持在 44。
  2. 如何访问标签等 ui 元素以更改其文本?

这是我的代码:

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; 
} 

native iOSCell:

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); 
} 

请您参考如下方法:

由于 M.D. 刚刚创建了一个 ViewCellRenderer 而不是 ListViewRenderer ,我们无法访问 GetHeightForRow 或 EstimatedHeight 方法。

方案一:在ListView上设置RowHeight

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

方案二:设置HasUnevenRows为True,并在ViewCell上设置Height

<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>