我尝试自定义 UITableViewCell。我这样做就像这里解释的那样:Xamarin Customizing a ViewCell
到目前为止一切顺利。 现在我尝试在一个xib中实现cell的ui。现在几乎可以工作了。我只有两个问题:
- 单元格的行高保持在 44。
- 如何访问标签等 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>
