El GroupHeaderTemplate afecta la altura de los elementos en la CollectionView en Xamarin Forms al utilizar la estrategia MeasureFirstItem.
Tengo un simple CollectionView
que mostrará imágenes y quiero que sean del mismo tamaño (por ejemplo, 60 unidades) y también están agrupadas. Como quería que el rendimiento del desplazamiento fuera bueno, utilicé ItemSizingStrategy="MeasureFirstItem"
, pero luego la altura de las imágenes terminó siendo la misma que la del encabezado.
Este simple CollectionView muestra este problema, donde mostramos Label
s con agrupación.
<collectionview x:name="CollectionViewTempalte" itemsizingstrategy="MeasureFirstItem" isgrouped="True" itemssource="{Binding Items}">
<collectionview.groupheadertemplate>
<datatemplate x:datatype="textcollectionview:GroupSampleDate">
<stacklayout orientation="Vertical">
<label text="Encabezado del Grupo"></label>
</stacklayout>
</datatemplate>
</collectionview.groupheadertemplate>
<collectionview.itemslayout>
<griditemslayout orientation="Vertical" span="4" verticalitemspacing="1" horizontalitemspacing="1"></griditemslayout>
</collectionview.itemslayout>
<collectionview.itemtemplate>
<datatemplate x:datatype="textcollectionview:SampelData">
<grid padding="2" backgroundcolor="Red">
<grid horizontaloptions="Center" heightrequest="86" widthrequest="86" backgroundcolor="Yellow">
<label text="Hola" backgroundcolor="Green"></label>
</grid>
</grid>
</datatemplate>
</collectionview.itemtemplate>
“`
No sé por qué, pero el CollectionView
está seleccionando el encabezado como el primer elemento y estableciendo la Altura
de los elementos en la Altura
del encabezado.
Funciona si configuro ItemSizingStrategy="MeasureAllItems"
, pero quiero saber cómo hacer que funcione con MeasureFirstItem
.
También encontré esto en los problemas (issues) https://github.com/xamarin/Xamarin.Forms/issues/8467 pero no hubo respuesta allí.
davy.ai
Para solucionar el problema de que el
CollectionView
selecciona el encabezado como el primer elemento y estableciendo la altura de los elementos como la altura del encabezado al utilizarItemSizingStrategy="MeasureFirstItem"
, puedes establecer la altura de laGroupHeaderTemplate
en cero. Esto evitará que elCollectionView
lo seleccione como el primer elemento y establezca la altura de los elementos como la altura del encabezado.Puedes modificar la sección
GroupHeaderTemplate
del código para incluir unHeightRequest
de 0 de la siguiente manera:Esta modificación te permitirá mantener
ItemSizingStrategy="MeasureFirstItem"
mientras aseguras que la altura de las imágenes se mantenga igual al tamaño especificado (60 unidades) sin verse afectada por la altura del encabezado.