我正在使用Xamarin Forms(2.5.1)和Telerik Data Controls(2018.1.405.2)来开发适用于iOS和Android的应用程序。我的目标是iOS 11.4和Android 7.0。
我有一个RadListView用于显示项目列表,这些项目利用常见的“下拉刷新,向下滚动以自动查询更多条目”工作流程。该功能有效。在Android上,我可以一直滚动到底部,查看列表中的最后一个条目,没有任何问题。
在iOS上,列表中的最后四个元素始终被截断。手动向下拉动自动弹回允许在切断物品上达到峰值,但显然这不是所需的功能。在Telerik论坛上,我找到了一个解决此问题的线程:
https://www.telerik.com/forums/last-cell-of-listview-cutoff
将RadListView放置在Grid元素中,如该线程中的最后一篇文章所述,确实解决了iOS上的问题。然后,我可以滚动到列表的底部,看到最后的元素,而不会对抗自动快照。
<Grid Padding="0, 0, 0, 0">
<td:RadListView x:Name="MyListView" ... >
然而,这似乎打破了Android上的东西。在Android上,当我这样做时,RadListView就完全消失了。它的元素都没有画出来。
我尝试了各种各样的事情,例如指定单个列和行,两者都具有自动大小,并且设置的值大小介于1和1000之间(并将RadListView放置在第0行和第0列)但不会更改任何东西。
我目前的想法是,我需要检测到该平台是iOS并在.xaml.cs中添加一个修复程序,以便在我以编程方式创建的新Grid元素下重新创建RadListView。我还没有完全正确地工作,但我认为应该可以通过视图的构造函数调用以下内容:
private void AddGridParent()
{
var grid = new Grid();
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
grid.Padding = new Thickness(0.0);
grid.Parent = MyListView.Parent;
grid.Children.Add(MyListView, 0, 0);
}
..但这似乎不应该是必要的。我不是想做任何不寻常的事情。我做了一些广泛的搜索,我找不到将RadListView放在Android网格内的任何已知问题。
我的问题是,什么导致RadListView放在网格内时不会显示在Android上,是否有针对此问题的标准接受修复?
编辑:我还会注意到,我不喜欢网格父解决方案的黑盒性质,并试图找出它在iOS上运行的原因。