我试图在Xamarin Forms中使用自定义ViewCellRenderer for iOS,但渲染器从未调用过。我也使用自定义ListViewRenderer,它就像一个魅力。有人对此有任何想法吗?
这是我的TableViewRenderer
[assembly: ExportRenderer(typeof(ListView), typeof(CustomTableViewRenderer))]
namespace OdontoWayPaciente.Mobile.iOS.Renderers
{
public class CustomTableViewRenderer : ListViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);
if (Control != null && e.NewElement != null)
{
Control.TableFooterView = new UIView(CGRect.Empty);
if (e.NewElement.IsGroupingEnabled)
{
var groupedTableView = new UITableView(Control.Frame, UITableViewStyle.Grouped);
groupedTableView.Source = Control.Source;
SetNativeControl(groupedTableView);
}
}
}
}
}
这是我的ViewCellRenderer:
[assembly: ExportRenderer(typeof(ViewCell), typeof(CustomAllViewCellRendereriOS))]
namespace OdontoWayPaciente.Mobile.iOS.Renderers
{
public class CustomAllViewCellRendereriOS : ViewCellRenderer
{
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tableView)
{
var cell = base.GetCell(item, reusableCell, tableView);
if (cell != null)
{
cell.SelectionStyle = UITableViewCellSelectionStyle.None;
}
if (tableView.Style == UITableViewStyle.Grouped)
{
cell.TintColor = UIColor.Blue;
cell.BackgroundColor = UIColor.Blue;
}
return cell;
}
}
}
这是我的ViewCell XAML代码:
<ViewCell Height="{StaticResource listItem_alturaLinhaUnica}"
StyleId="disclosure">
<ContentView>
<ContentView.BackgroundColor>
<OnPlatform x:TypeArguments="Color" iOS="White"/>
</ContentView.BackgroundColor>
<AbsoluteLayout VerticalOptions="Center" BackgroundColor="White">
<Label
Text="{Binding TextoAcesso}"
Style="{DynamicResource TextoPrimario}">
<Label.Margin>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="18, 8, 0, 8"/>
</OnPlatform>
</Label.Margin>
</Label>
</AbsoluteLayout>
</ContentView>
</ViewCell>
答案 0 :(得分:1)
请检查您的ListView&#39; ItemsSource
,ListView
应至少有一个单元格,然后调用CustomViewRenderer。
如果我使用ListView与GroupingEnabled = True,则CustomViewRenderer不是 调用,但GroupingEnabled = false,调用CustomViewCellRenderer
您是否只是在ItemsSource
中添加了一些组:new List<Group> { group1, group2 };
,但每个组都不包含任何项目。当您将IsGroupingEnabled
设置为false时,ListView在这种情况下有两个单元格,因此调用渲染器。但是如果IsGroupingEnabled
为真,则ListView只有两个没有任何单元格的部分,则不会调用渲染器。