出于性能原因,我决定为Xamarin Forms中的ListView编写一个自定义ViewCell。对于此ViewCell,我扩展了适用于iOS的ViewCellRenderer。在GetCell-Method中,我创建了扩展的UITableViewCell的新实例,该实例创建了一些标签和图像,并通过锚点上的一些约束来排列它们。
Xamarin表单中的ListView具有HasUnevenRows =“ True”,但所有行均以44px截断。如何从自定义UITableViewCell获取所创建内容的行的自动高度?
答案 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