gpt4 book ai didi

ios - 使用 ViewCellRenderer 在 iOS 上的 Xamarin Forms 中自动设置 ViewCell 高度

转载 作者:行者123 更新时间:2023-11-29 13:56:48 25 4
gpt4 key购买 nike

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

Xamarin Forms 中的 ListView 具有 HasUnevenRows="True",但行均在 44px 处被截断。如何通过自定义 UITableViewCell 中创建的内容获得行的自动高度?

最佳答案

原因:

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

如果使用自定义渲染器,则由渲染器设置单元格的高度,但实际上您必须在 GetHeightForRow 重写中执行此操作UITableViewSource

这意味着您必须在 UITableViewSource 中计算行高,如果您想在行不均匀的 ListView 中使用自定义视单元渲染。

解决方案:

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

[assembly: ExportRenderer(typeof(ListView), typeof(MyLVRenderer))]
public class MyLVRenderer : ListViewRenderer
{
//UITableViewSource originalSource;

protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);

UITableViewSource originalSource = (UIKit.UITableViewSource)Control.Source;
Control.Source = new MyLVSource(originalSource);

}
}

public class MyLVSource : UITableViewSource
{
UITableViewSource originalSource;

public MyLVSource(UITableViewSource origSource)
{
originalSource = origSource;
}

public override nint RowsInSection(UITableView tableview, nint section)
{
return originalSource.RowsInSection(tableview, section);
}

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
return originalSource.GetCell(tableView, indexPath);
}

public override nfloat GetHeightForFooter(UITableView tableView, nint section)
{
return originalSource.GetHeightForFooter(tableView, section);
}

public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
nfloat origHeight = originalSource.GetHeightForRow(tableView, indexPath);

// calculate your own row height here
return origHeight + (indexPath.Row +1) * 10;
}
}

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

引用:viewcell

关于ios - 使用 ViewCellRenderer 在 iOS 上的 Xamarin Forms 中自动设置 ViewCell 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com