使用ViewCellRenderer在iOS上的Xamarin表单中ViewCell的自动高度

时间:2019-03-12 21:07:47

标签: ios forms listview xamarin

出于性能原因,我决定为Xamarin Forms中的ListView编写一个自定义ViewCell。对于此ViewCell,我扩展了适用于iOS的ViewCellRenderer。在GetCell-Method中,我创建了扩展的UITableViewCell的新实例,该实例创建了一些标签和图像,并通过锚点上的一些约束来排列它们。

Xamarin表单中的ListView具有HasUnevenRows =“ True”,但所有行均以44px截断。如何从自定义UITableViewCell获取所创建内容的行的自动高度?

2 个答案:

答案 0 :(得分:0)

您应覆盖LayoutSubviews。您应该将renderer.NativeView.Frame设置为适当的值。

答案 1 :(得分:0)

原因:

实际上,如果不使用自定义渲染器,则HasUnevenRows=true的自动高度在iOS上可以正常使用。

如果使用自定义渲染器,则由渲染器设置单元格的高度,但实际上您必须在 GetHeightForRow 覆盖中进行设置 UITableViewSource 中。

这意味着您必须计算UITableViewSource中的行高,以便在GetHeightForRows override中设置一行的高度,如果您想在具有不均匀行的listView。

解决方案:

基本上,您必须自定义ListView renderer。然后,您必须获取UITableView's Source属性(列表视图渲染器中的Control.Source)并将其传递给您创建的UITableVIewSource子类的新实例,然后覆盖所有{ {1}}方法,这样您就可以在不想更改任何内容时调用原始源方法,但是对于 GetRowForHeight 方法,您将返回该行所需的高度。例如:

UITableViewSource

这是将每行的行高增加十的示例。您必须自己计算自己的行高。如果您需要,我可以与您分享演示。

引用:viewcell